我尝试了一些事情并且每次尝试都遇到了不同的错误。首先,我使用'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
对象的更改。我是否正确地采用这种方式?
答案 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))