2017-04-23 80 views
0

所以我必須採取一個.csv文件(可以下載,點擊這個:http://ge.tt/7lx5Boj2/),我想將它轉換成一個2D列表。如何在2D列表中替換字符串字符?

我的代碼目前是這樣做的,但有一個問題。

嵌套列表中的每個元素都被讀爲大字符串而不是元素列表,因爲在每個嵌套列表的開始和結尾都添加了撇號。

例如,而不是:

["ID","Name","Type 1","Type 2","Generation","Legendary"] 

我越來越:

['"ID","Name","Type 1","Type 2","Generation","Legendary"'] 

要解決這個問題,我試圖讓一個嵌套循環來一個空的替換列表中的每個撇號字符,但我的代碼不會做任何事情。它只是打印完全相同的字符串,就好像替換操作從未發生過一樣。

def read_info_file(filename): 
     opened_infocsv = open(filename, 'r') #opens an argued .csv file with INFO ormat. 
     linebylinelist = [fline.splitlines() for line in opened_infocsv] #converts entire .csv into a 2D list 
     opened_infocsv.close() 

     print(linebylinelist) 
     print('\n') 

     for i in linebylinelist: 
      for l in i: 
       l.replace("'","") 

     print(linebylinelist) 

    read_info_file('info_file5.csv') 

任何想法解決這個問題?注意:我不允許導入CSV

編輯:我試過改變.replace到.strip,它仍然不起作用。我真的不知道如何解決這個問題。

我認爲問題的根源與我使用列表理解將CSV轉換爲2d列表的方式有關。也許可以將CSV轉換爲2d列表,而不必先將行轉換爲字符串。

+0

我建議你至少在使用Python的csv庫。這將自動將每行轉換爲值列表,而無需拆分或替換。 –

+0

不幸的是,我不允許導入csv – ruckarucka

回答

0

str.replace不會更改當前字符串 - 它會返回一個副本的字符串,其中所有出現的舊字符串將替換爲new。您應該將函數的結果分配給當前列表項。

for i in linebylinelist: 
    for kk,ss in enumerate(i): 
     i[kk] = ss.replace("'","") 
+0

我對符號「ss,kk」不熟悉。你能解釋一下這是幹什麼的嗎?還有,是否有直接替換的地方?我也得到一個「int對象沒有屬性'replace'」錯誤。 – ruckarucka

+0

http://stackoverflow.com/questions/22171558/what-does-enumerate-mean – napuzba

+0

謝謝你的鏈接,但你發佈的解決方案是行不通的。 – ruckarucka

0

使用csv模塊讀取csv文件。

此外,要打開文件,請使用context manager。舉個例子,看下面的代碼。

import csv 
filename = 'info_file5.csv' 
with open(filename, 'r') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     print(row) 
+0

不幸的是,我不允許導入csv – ruckarucka