1

我尝试了一些事情,每次尝试都遇到了不同的错误。'r'首先,我正在使用and选项进行读写'w',但这会导致在 excel 中查看时,导致 csv 在实际行之间具有空白行。

'rb'所以,我发现我必须用and来读写'wb'。但是,现在我得到了错误:_csv.Error iterator should return strings, not bytes (did you open the file in text mode?).

这是我的代码:

def readLines():
    r = csv.reader(open('test.csv', "rb"), dialect="excel")
    return [l for l in r] #causes the error

def writeFile(lines):
    resultFile = open('output.csv', 'wb')
    wr = csv.writer(resultFile, dialect='excel')
    wr.writerows(lines)

我对lines需要它们是字符串的对象进行了一些更改。我会以正确的方式解决这个问题吗?

4

3 回答 3

2

问题是我没有设置新的线属性。

这是我现在正在运行的更新代码:

def readLines():
    r = csv.reader(open('test.csv', "rt", newline=''), dialect="excel")
    return [l for l in r]

def writeFile(lines):
    resultFile = open('output.csv', 'wt', newline='')
    wr = csv.writer(resultFile, dialect='excel')
    wr.writerows(lines)
于 2013-02-08T23:22:58.807 回答
0

尝试以文本模式打开文件:

r = csv.reader(open('test.csv', "rt"), dialect="excel")

resultFile = open('output.csv', 'wt')
于 2013-02-08T23:13:33.757 回答
0

如果您的文本有重音符号或使用非英语的其他语言,您可能需要从Python 库标准中选择正确的编码。一些文本编辑器允许您知道特定文件的编码。我发现了 TextWrangler。因此,读取带有重音符号(西班牙语)的文件的正确 Python 代码是:

import csv
def imp_csv(ruta):
    with open(ruta,'rt', newline='', encoding="mac_roman") as csvfile:
        r = csv.reader(csvfile, dialect='excel')
        for row in r:
            print(','.join(row))
于 2018-11-15T01:30:28.070 回答