换行符不适用于python 2.7

换行符不适用于python 2.7,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,因此,我编写了一个python脚本,对文本文件进行格式化,以便可以导入到SQL中。我使用的是Python3.5,我的代码运行得非常好 但是,当我尝试在Python2.7中运行代码时,它不起作用,并抛出此错误。(我不得不用2.7)直到后来我才知道这一点 TypeError: 'newline' is an invalid keyword argument for this function. 有没有办法解决这个问题,如果我不使用换行符,它会跳过数据中的行,并显示为空行 这是我的密码: impor

因此,我编写了一个python脚本,对文本文件进行格式化,以便可以导入到SQL中。我使用的是Python3.5,我的代码运行得非常好

但是,当我尝试在Python2.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兼容。非常感谢

简短的回答是:使用与Python3的
open
具有相同签名的
io.open

csv
模块为您处理行结束,以便它可以处理不同于本地文件系统编码的行结束。例如,即使在linux上,方言也可能希望写入
\r\n
行结尾。在Python2中,解决方案是以二进制模式打开文件

在Python3中,情况有所不同。以二进制模式打开的文件返回
字节
对象,这些对象需要解码才能成为unicode字符串对象。您可以在文本模式下打开,但这需要做两件事——解码和换行翻译。因此,
newline
关键字被发明了。它允许您以文本模式打开以进行解码,但将换行符保留在字符串中


python 2和python 3上的
io.open
函数中也提供了此功能。你可以用这个函数来得到你想要的。注意,您还需要做出某种解码决策。默认情况下,其返回值为anywhich
sys.getfilesystemencoding()
。您可能需要首先决定如何对csv文件进行编码,并在文件中使用该编码。

python 2.7中没有
换行符
参数
open
函数是否有类似于python 2.7的换行符的参数?文件中的哪一个字符描述了行/行?我不确定为什么需要
newline=''
。它将对象置于通用换行符模式,并返回不变的换行符。因此,例如,
\r\n
仍然存在。但是csv阅读器将换行符剥离,因此它不是真正需要的。如果在
“rU”
模式下打开该文件,则会得到通用换行符,但它们会被转换为
\n
。但谁在乎呢,csv阅读器对此没问题。尝试在
“rU”
模式下打开。。。将Python 2移植到3 HOWTO的第六段