我写了一个Python脚本来将文本文件格式化,以便导入我的SQL。我正在使用Python 3.5,我的代码运行得非常完美。
然而,当我尝试在Python 2.7中运行我的代码时,它无法工作并且报错。(我必须使用2.7)我之前不知道这一点。
TypeError: 'newline' is an invalid keyword argument for this function.
如果我不使用换行符,是否有解决方法来避免它跳过我的数据中的行并显示为空行。
以下是我的代码:
import csv
import os
my_file_name = os.path.abspath('NVG.txt')
cleaned_file = "cleanNVG.csv"
BulkImport_file = 'BulkImport.txt'
remove_words = ['INAC-EIM','-INAC','TO-INAC','TO_INAC','SHIP_TO-inac','SHIP_TOINAC']
with open(my_file_name, 'r', newline='') as infile, open(cleaned_file, 'w',newline='') as outfile:
writer = csv.writer(outfile)
cr = csv.reader(infile, delimiter='|')
writer.writerow(next(cr)[:25])
for line in (r[0:25] for r in cr):
if not any(remove_word in element for element in line for remove_word in remove_words):
line[11]= line[11][:5]
writer.writerow(line)
infile.close()
outfile.close()
with open(cleaned_file, 'r') as fin, open(BulkImport_file, 'w') as fout:
reader = csv.DictReader(fin)
writer = csv.DictWriter(fout, reader.fieldnames, delimiter='|')
writer.writeheader()
writer.writerows(reader)
如何修改我的代码,使其与Python 2.7兼容。非常感谢!
open
函数中没有newline
参数。 - ᴀʀᴍᴀɴnewline=''
。它将对象置于通用换行模式,并返回未更改的换行符。因此,例如,\r\n
保持不变。但是 csv reader 剥离了换行符,所以它实际上并不需要。如果您在"rU"
模式下打开文件,则会获得通用换行符,但它们会被转换为\n
。但是谁在乎呢,csv reader 对此没有问题。尝试在"rU"
模式下打开。 - tdelaneycsv
模块更喜欢以二进制模式(rb'和'wb')打开文件,并根据csv方言处理换行符。我之前没有注意到Python 3.x需要在
newline=''模式下使用
r和
'w'`。由于这些签名有很大的不同,因此采用打开方式不同的中间函数似乎是最好的方法。 - tdelaney