从Excel中读取并写入另一个的问题

时间:2013-02-08 22:51:54

标签: python excel csv python-3.x

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

所以,我发现我必须使用'rb''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对象的更改。我是否正确地采用这种方式?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

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

resultFile = open('output.csv', 'wt')

答案 2 :(得分:0)

如果您的文字带有重音或使用英语以外的其他语言,则可能需要从the Python Library standard中选择正确的编码。一些文本编辑器允许您知道特定文件的编码。我发现与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))