【问题标题】:How to replace a string character in place in a 2D list?如何在二维列表中替换字符串字符?
【发布时间】:2017-09-20 07:57:26
【问题描述】:

所以我必须获取一个 .csv 文件(可以点击此处下载:http://ge.tt/7lx5Boj2/),我想将其转换为 2D 列表。

我的代码目前可以这样做,但有一个问题。

嵌套列表的每个元素都被读取为一个大字符串而不是元素列表,因为在每个嵌套列表的开头和结尾都添加了一个撇号。

例如,而不是:

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

我得到:

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

为了解决这个问题,我尝试创建一个嵌套的 for 循环,用一个空字符替换列表中的每个撇号,但我的代码没有做任何事情。它只是打印完全相同的字符串,就好像替换操作从未发生过一样。

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 转换为二维列表的方式有关。也许可以在不先将行转换为字符串的情况下将 CSV 转换为 2d 列表。

【问题讨论】:

  • 我建议您至少看看使用 Python 的 csv 库。这将自动将每一行转换为值列表,而无需拆分或替换。
  • 很遗憾,我不允许导入 csv

标签: python list for-loop replace nested-lists


【解决方案1】:

str.replace 不会更改当前字符串 - 它返回字符串的副本,其中所有出现的子字符串 old 都替换为 new。您应该将函数的结果分配给当前列表项。

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

【讨论】:

  • 我不熟悉符号“ss,kk”。你能解释一下这是做什么的吗?另外,有没有直接就地替换的?我也收到“int object has no attribute 'replace'”错误。
  • 感谢您提供链接,但您发布的解决方案不起作用。
【解决方案2】:

使用 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)

【讨论】:

  • 很遗憾,我不允许导入 csv
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2022-01-02
  • 2022-11-20
  • 1970-01-01
  • 2020-04-05
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多