我有一个网络刮板抓取以下数据:
TESTDATA
DATA:DATA
Data £9500
Data £930
Data £500
Data £2250
Data £930
Data £500
Data £2250
DATATEST
DATA:DATA
Data £95001
Data £9302
Data £5003
Data £22504
Data £9305
Data £5006
Data £22507
正在运行:print full_end
返回:
[u'TESTDATA', 'DATA:DATA', 'Data £9500', 'Data £930', 'Data £500', 'Data £2250', 'Data £930', 'Data £500', 'Data £2250', '\r', DATATEST', 'DATA:DATA', 'Data £95001', 'Data £9302', 'Data £5003', 'Data £22504', 'Data £9305', 'Data £5006', 'Data £22507']
正在运行:print repr(full_end)
返回:
u"TESTDATA\nDATA:DATA\nData £9500\nData £930\nData £500\nData £2250\nData £930\nData £500\nData £2250\n\r\nDATATEST\nDATA:DATA\nData £95001\nData £9302\nData £5003\nData £22504\nData £9305\nData £5006\nData £22507"
正在运行:print repr('\r\n'.join(full_end).strip())
返回:
u"TESTDATA\r\nDATA:DATA\r\nData £9500\r\nData £930\r\nData £500\r\nData £2250\r\nData £930\r\nData £500\r\nData £2250\r\n\r\r\nDATATEST\r\nDATA:DATA\r\nData £95001\r\nData £9302\r\nData £5003\r\nData £22504\r\nData £9305\r\nData £5006\r\nData £22507"
图片:http://i.imgur.com/Qe0TE5Y.png
使用以下脚本
with open('FULL_DATA.txt','r') as full_end_datafile:
full_end_datafile_read = full_end_datafile.read()
encoded_data = '\n'.join(full_end).encode("Latin-1")
if full_end_datafile_read == encoded_data:
encoded_data = ""
else:
with open('FULL_DATA.txt','w') as full_end_datafile:
full_end_datafile.write('\n'.join(full_end).encode("Latin-1"))
rb
和wb
,我会收到以下内容:
它无法识别数据是否相同并重新保存文件
任何人都知道如何解决这个问题?
提前致谢 - Hyflex
答案 0 :(得分:1)
这是因为Python在处理文本文件时所做的End-Of-Line转换。 Windows EOL是两个字符(CR
和LF
),而Unix / Linux仅使用LF
。虽然Windows的记事本仅识别Windows的约定,但Notepad ++同时识别这两者。在第一张图片上,Python是当前的OS约定;在第二个图像中,您只是传递二进制数据(并且您将获得Unix / Linux约定)。
答案 1 :(得分:1)
打开文件时,请使用U标志:
with open('FULL_DATA.txt','Ur')
这意味着“通用EOL”,并将所有不同的EOL(例如\r\n
)翻译为\n
。 EOL之间的差异是您的比较失败的一个原因。可能还有其他人,但从这个开始。
答案 2 :(得分:0)
记事本不需要回车'\r'
吗?
full_end_datafile.write('\r\n'.join(full_end).encode("Latin-1"))
在进行比较之前,您可以尝试剥离\r
和\n
。如果你不关心看不见的东西,即使在你的字符串上运行.strip()来删除额外的空格也会有所帮助。