这个用于.csv的python程序出了什么问题?

Jam*_*man 1 python csv

我有一个包含字符串列表的文本文件.

我想在.csv文件中搜索以这些字符串开头的行,并将它们放在一个新的.csv文件中.

在这种情况下,文本文件称为"output.txt",原始.csv为"input.csv",新的.csv文件为"correct.csv".

代码:

import csv

file = open('output.txt')
while 1:
    line = file.readline()
    writer = csv.writer(open('corrected.csv','wb'), dialect = 'excel')
    for row in csv.reader('input.csv'):
        if not row[0].startswith(line):
            writer.writerow(row)
    writer.close()
    if not line:
        break
    pass
Run Code Online (Sandbox Code Playgroud)

错误:

Traceback (most recent call last):
File "C:\Python32\Sample Program\csvParser.py", line 9, in <module>
writer.writerow(row)
TypeError: 'str' does not support the buffer interface`
Run Code Online (Sandbox Code Playgroud)

新错误:

Traceback (most recent call last):
File "C:\Python32\Sample Program\csvParser.py", line 12, in <module>
for row in reader:
_csv.Error: line contains NULL byte
Run Code Online (Sandbox Code Playgroud)

问题是CSV文件是用标签而不是逗号保存的,现在新问题如下:

Traceback (most recent call last):
  File "C:\Python32\Sample Program\csvParser.py", line 13, in <module>
    if row[0] not in lines:
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

CSV文件有500多个数据条目......这有什么不同吗?

Ble*_*der 6

如果查看文档,这reader是初始化的方式:

spamReader = csv.reader(open('eggs.csv', 'r'), ...
Run Code Online (Sandbox Code Playgroud)

请注意open('eggs.csv, 'rb').你没有传递一个file句柄9,所以str它被视为一个文件句柄,并向你抛出错误.

9用这个替换:

csv.reader(open('input.csv', 'r', newline = ''))
Run Code Online (Sandbox Code Playgroud)