python - 使用python将特定行从一个csv复制到另一个
问题描述
我有一个带有行索引号的变量,我想从一个 CSV 文件中获取这些行并将这些行写入一个新文件。
我试图从中复制的 CSV 文件如下所示:
sdkgsk;74785797;hdfgsdgfjss
asdjkhfgsdkjg;9857349834;jsdhfg
skhgf;76578346534;jhfgsdjhgdf
sdifl;56975654;kjdjh
afhkddf;439587349346;hsfd
kdgfdkj;983496;hioas
oish;89468468;jhfdsgsdf
jksdfjhksdfjk;8968;jkfdsjhksd
我尝试了多种方法,但这是最后一种:
row_index = [2,4,6]
with open('test.csv', 'r') as f,open('out.csv', 'w') as f_out:
reader = csv.reader(f)
writer = csv.writer(f_out)
lines = list(reader)
for row in lines:
writer.writerow(row[row_index])
我期待生成一个名为“out.csv”的新文件,其中包含来自“test.csv”的第 2,4 和 6 行
相反,我收到此错误消息:“列表索引必须是整数或切片,而不是列表”
解决方案
问题在于这一行:
writer.writerow(row[row_index])
row_index
是一个列表,你不能row
用另一个列表来索引一个整数列表( )。这正是 python 解释器试图通过此错误消息告诉您的内容:
list indices must be integers or slices, not list
您可以做的是使用列表推导new_row
基于列表创建row_index
:
for row in lines:
new_row = [row[index] for index in row_index]
writer.writerow(new_row)
编辑:我错过了另一个问题。根据您的代码,我认为您想从每一行重写第 2,4 和 6 列,但您真正想要索引的是行,而不是列。因此,您想重写完整的第 2,4 和 6 行。在这种情况下,您可以再次使用列表推导。
with open('test.csv', 'r') as f,open('out.csv', 'w') as f_out:
reader = csv.reader(f)
writer = csv.writer(f_out)
lines = list(reader)
new_rows = [lines[index] for index in row_index]
writer.writerows(new_rows)
错误消息再次list index out of range
告诉您到底出了什么问题。下次请尝试仔细阅读和解释错误消息。
推荐阅读
- api - POST 请求在 Postman 中工作,但在 Android Studio 中不工作
- javascript - 如何使用 VSCode 导入 fetch?
- python - 如何用pyarmor和虚拟环境打包python代码?
- javascript - 找不到使用 Javascript 访问输入字段的方法
- pandas - 以与第二个数据帧相同的顺序引入数据帧行
- php - 终端中的作业处理编号 - laravel 中的队列
- awk - 如何让 awk 打印变量而不是完整匹配的行?
- python - ValueError:int() 的无效文字,基数为 10:'D1'
- json - JSON中的Powershell嵌套文件夹循环
- c++ - C++ DLL 行为在 py3.6 和 py3.8 之间有所不同:SIGSEGV "__gnu_cxx::__exchange_and_add" 与 Python 3.6.6