python - 在嵌套列表中读取 CSV 并需要修复 - 需要更有效的方式
问题描述
问题: 我的程序读取一个 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,以免生成嵌套列表。AFAIK 无法将逗号设置为 EOL 字符(这将解决我的问题,因为我在输入中的值之间没有行尾。
可能相关的问题:
解决方案
在此之后,我需要“清理”并执行一个额外的步骤 - 一个 for 循环 - 以取消嵌套列表:
无需将项目一一复制到新列表中。
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
循环中使用迭代器:
for row in reader:
...
与列表的主要区别在于您不能直接访问迭代器的元素:reader[0]
不起作用。但是该next()
函数每次调用它时都会从迭代器中检索下一个元素。
在这种情况下,next(reader)
只调用一次,因此您将获得数据的第一“行”。
关于newline=""
. 这并不意味着没有换行符。这意味着该csv
模块将为您处理换行符并自动适应 Windows、Mac 或 *nix 样式的换行符。在处理csv
模块时,您应该始终打开文件newline=""
。
推荐阅读
- r - R:r tweets:错误:只能选择一种搜索类型。试试 type = 'recent'
- python - Django:整数字段,即ManyToMany字段的计数
- python - 使用 python 绘制两个大列表 - “unhashable type: 'numpy.ndarray'”
- c# - FluentValidation 是否具有开箱即用的错误级别?
- c - C中'->'(结构的动态分配向量)的类型参数无效
- java - Android Studio Fragments 数学计算
- html - Vuejs 嵌套 v-for 和标签问题
- windows - 如何使用 git-bash 设置 GIT_WORK_TREE
- visual-studio-2017 - 使用 nuget.client dll 解决冲突的依赖项
- angular - 如何将反应形式绑定到 md-select?