2017-04-23 76 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