Python 从excel CSV读取和写入其他文件时出现的问题
我尝试过一些事情,每次尝试都会遇到不同的错误。首先,我使用“r”和“w”选项进行读写,但这会导致在excel中查看时,实际行之间出现空行 所以,我发现我必须用“rb”和“wb”读写。但是,现在我得到了一个错误:_csv.error迭代器应该返回字符串,而不是字节。您在文本模式下打开文件了吗 这是我的密码:Python 从excel CSV读取和写入其他文件时出现的问题,python,excel,csv,python-3.x,Python,Excel,Csv,Python 3.x,我尝试过一些事情,每次尝试都会遇到不同的错误。首先,我使用“r”和“w”选项进行读写,但这会导致在excel中查看时,实际行之间出现空行 所以,我发现我必须用“rb”和“wb”读写。但是,现在我得到了一个错误:_csv.error迭代器应该返回字符串,而不是字节。您在文本模式下打开文件了吗 这是我的密码: def readLines(): r = csv.reader(open('test.csv', "rb"), dialect="excel") return [l for l
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对象做了一些修改,要求它们是字符串。我这样做是否正确?尝试以文本模式打开文件:
r = csv.reader(open('test.csv', "rt"), dialect="excel")
resultFile = open('output.csv', 'wt')
问题是我没有设置新行属性 以下是我现在正在使用的更新代码:
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)
如果您的文本带有重音或使用的语言不是英语,您可能需要从中选择正确的编码。某些文本编辑器允许您了解特定文件的编码。我和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))
我试过了,但结果是excel文件中有额外的行。+1。这是Python2和Python3之间的区别。Python3在打开文件时必须使用文本模式,因为它需要以Unicode字符串的形式读取内容。如果Excel表格中包含使用特定编码的文本,您还可以根据需要设置编码。@谢谢您解释此修复方法。我不确定它到底为什么起作用,但我认为这是由于3.x与2.x之间的差异。在Python2中,字符串类型实际上是一系列字节。当您从以二进制或文本模式打开的文件中读取它们时,这并没有什么区别。这被csv模块误用。二进制模式是必需的,因为它不能在换行符处停止解析。换行符可能是字符串值的一部分。在Python 2中,换行符作为其他字节读取。Python3中所需的文本模式需要另一种方式来说明不能解释换行符-换行符=see。str和bytes是不同的类型。