使用python文件写入器写入mac csv不起作用

使用python文件写入器写入mac csv不起作用,python,macos,csv,line-breaks,file-writing,Python,Macos,Csv,Line Breaks,File Writing,我有一个python代码,它比较两个文件,返回公共行并将它们写入结果文件。我用的是MAC电脑 script.py with open('temp1.csv', 'r') as file1: with open('serialnumbers.txt', 'r') as file2: same = set(file1).intersection(file2) print same with open('results.csv', 'w') as file_o

我有一个python代码,它比较两个文件,返回公共行并将它们写入结果文件。我用的是MAC电脑

script.py

with open('temp1.csv', 'r') as file1:
    with open('serialnumbers.txt', 'r') as file2:
        same = set(file1).intersection(file2)
        print same

with open('results.csv', 'w') as file_out:
    for line in same:
        file_out.write(line)
        print line
temp1.csv

M11435TDS144
M11543TH4292
SN005
M11509TD9937
M11543TH4258
SN005
SN006
SN007
serialnumbers.txt

G1A114042400571
M11251TH1230
M11543TH4258
M11435TDS144
M11543TH4292
M11509TD9937
上述脚本在mac上的输出为

集合([])


如果我在windows上运行相同的脚本,它工作正常。我发现这是mac上的csv问题。如何解决此问题?

两个文件的结束分隔符不同

  • .csv文件的Windows行尾可能为“\r\n”
  • .txt文件可能有Posix行结尾:“\n”
所以,在二进制模式下,行总是不同的

您应该以文本模式读取这两个文件,如下所示:

import io

with io.open('temp1.csv', 'r') as file1:
    with io.open('serialnumbers.txt', 'r') as file2:
        same = set(file1).intersection(file2)
        print(same)
您将获得:

set([u'M11543TH4258\n', u'M11509TD9937\n', u'M11543TH4292\n', u'M11435TDS144\n'])
还请注意,CSV文件通常使用ISO-8859-1或cp1252编码(Windows的传统编码)

取消换行
两个文件的结束分隔符不同

  • .csv文件的Windows行尾可能为“\r\n”
  • .txt文件可能有Posix行结尾:“\n”
所以,在二进制模式下,行总是不同的

您应该以文本模式读取这两个文件,如下所示:

import io

with io.open('temp1.csv', 'r') as file1:
    with io.open('serialnumbers.txt', 'r') as file2:
        same = set(file1).intersection(file2)
        print(same)
您将获得:

set([u'M11543TH4258\n', u'M11509TD9937\n', u'M11543TH4292\n', u'M11435TDS144\n'])
还请注意,CSV文件通常使用ISO-8859-1或cp1252编码(Windows的传统编码)

取消换行
如果它是Windows上的CSV文件,则使用“\r\n”分隔符。我假设一个文件有“\r\n”,另一个只有“\n”。你能检查一下吗?在mac上测试,得到的输出与你描述的不同…尝试:
same=set(文件1中l的l.strip())。交叉点(文件2中l的l.strip())
请在每个temp和serialnumber文件上添加一行额外的新行,然后再次测试它-谢谢您,这是哪个python版本?如果它是Windows上的CSV文件,它将使用“\r\n”分隔符。我假设一个文件有“\r\n”,另一个只有“\n”。你能检查一下吗?在mac上测试,得到的输出与你描述的不同…尝试:
same=set(文件1中l的l.strip())。交叉点(文件2中l的l.strip())
请在每个temp和serialnumber文件上添加一行额外的新行,然后再次测试它-谢谢您这是哪个python版本?然后您需要重新添加新行字符以保持一致性。谢谢laurent。。这很有帮助。。但当我将其写入结果文件时,它会将所有内容都写入同一行。@KrishnaPrasad:所以使用第一种解决方案:不要删除行…然后需要重新添加新行字符以保持一致性。谢谢laurent。。这很有帮助。但当我将这些内容写入结果文件时,它将所有内容都写入同一行。@KrishnaPrasad:所以使用第一种解决方案:不要删除这些行…