Python 读取CSV会导致嵌套列表,需要修复-需要更有效的方法

Python 读取CSV会导致嵌套列表,需要修复-需要更有效的方法,python,performance,csv,Python,Performance,Csv,问题是: 我的程序读取一个CSV文件并生成一个嵌套列表,因为没有换行符,我需要在以后“修复”列表,然后才能继续。代码是有效的,但我正在努力寻找一种更有效的方法,我对任何建议都感兴趣 详情如下: 我的程序读取具有以下格式的CSV文件: hakcke39475728,fjfjalcl689920,vjgjvkv848291 因此,每个项目都包含一组字母和数字,以逗号作为分隔符,中间没有新行。我使用csv读取文件并将结果放入列表: import csv result = [] with open("

问题是: 我的程序读取一个CSV文件并生成一个嵌套列表,因为没有换行符,我需要在以后“修复”列表,然后才能继续。代码是有效的,但我正在努力寻找一种更有效的方法,我对任何建议都感兴趣

详情如下:

我的程序读取具有以下格式的CSV文件:

hakcke39475728,fjfjalcl689920,vjgjvkv848291

因此,每个项目都包含一组字母和数字,以逗号作为分隔符,中间没有新行。我使用csv读取文件并将结果放入列表:

import csv

result = []
with open("input.csv", "r", newline="") as f:
    reader = csv.reader(f, delimiter=",", quotechar='"')
    result = list(reader)
由于没有换行符,结果是以下格式的嵌套列表:

[['hakcke39475728','fjfjalcl689920','vjgjvkv848291','…',[]

在这之后,我需要清理并执行额外的步骤(for循环),以取消列表的测试:

output_final = [] 
for item in result[0]:
    output_final.append(item)
要最终获得我需要的输出,请执行以下操作:

['hakcke39475728'、'fjfjalcl689920'、'vjgjvkv848291'、'…']

哪种方式更有效

我不知道如何以不同的方式读取CSV,这样它就不会产生嵌套列表。抱歉,没有办法将逗号设置为下线字符,这将解决我的问题,因为我在输入中的值之间没有行尾

可能相关的问题:

我发现了,但这是关于以不同的方式编写CSV,而不是阅读它,在我的情况下,这是不可能的。 是要求一个嵌套列表,而不是想要摆脱它,但是没有办法对解决方案进行反向工程。 在这之后,我需要清理并执行额外的步骤(for循环),以取消列表的测试:

output_final = [] 
for item in result[0]:
    output_final.append(item)
无需将项目逐个复制到新列表中

output_final = result[0]
或者,在假设CSV文件实际上只包含一行数据的情况下,使用更多上下文:

import csv

with open("input.csv", "r", encoding="utf8", newline="") as f:
    reader = csv.reader(f, delimiter=",", quotechar='"')
    result = next(reader)
csv阅读器是一个迭代器-它在csv文件中的行上进行迭代。通常在for循环中使用迭代器:

列表的主要区别在于不能直接访问迭代器的元素:读卡器[0]无法工作。但next函数在每次调用迭代器时都从迭代器中检索下一个元素

在这种情况下,只调用一次Nextrader,因此您将获得数据的第一行


关于newline=。这并不意味着没有新词。这意味着csv模块将为您处理换行符,并自动适应Windows、Mac或*nix样式的换行符。处理csv模块时,您应该始终使用newline=打开文件。

您不能简单地使用listreader[0]访问结果吗?是的,谢谢。这就是我现在正在做的。我添加了修复的代码片段,就是这样。我只是想知道这是否是最有效的方法,或者我在这里遗漏了什么。似乎您有一个由逗号分隔的单个条目组成的文件,所以openinput.csv,r,newline=.split',可能就足够了。您实际上不需要for循环。只需输出_final=listreader[0]即可。另外,snakecharmerb对csv阅读器的更改可能会更干净。JasonChia-是的,你的建议有效。谢谢@snakecharmerb-我在尝试您的建议时出错:AttributeError:“\u io.TextIOWrapper”对象没有属性“split”-需要对此进行检查,因为我现在无法找到修复方法。有什么建议吗?谢谢!使用Nextrader完成了这个任务,它准确地创建了我需要的列表。@ladyfrauke在处理CSV数据时,请记住下一步。例如,您可以使用它跳过CSV读卡器中的标题行-Nextrader将读卡器向前推进一步,然后您可以调用reader:中的行来查看其余的数据。