在应用编码进行写入之前,检查数据是否不同

2024-03-28 21:43:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个刮网器,刮取以下数据:

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"))

注意:在记事本中编辑文件时,每个数据集/组之间显示1行,在记事本++中,每个数据集/组之间显示2行

http://i.imgur.com/FhV5wJx.png

如果我将写和读选项更改为rbwb,我会得到以下结果:

http://i.imgur.com/hmXy6tf.png

它无法识别数据是否相同,它会重新保存文件

有人知道怎么修吗?你知道吗

提前谢谢 -海弗莱克斯


Tags: 数据readdatafullendtestdataprintjoin
3条回答

你不需要回车'\r'作为记事本吗?你知道吗

full_end_datafile.write('\r\n'.join(full_end).encode("Latin-1"))

在进行比较之前,您可以尝试剥离\r\n。即使在字符串上运行.strip()来删除多余的空白也会有帮助,如果你不在乎那些看不见的东西的话。你知道吗

打开文件时,请使用U标志:

with open('FULL_DATA.txt','Ur')

这意味着“通用EOL”,并将所有不同的EOL(如\r\n)转换为\n。EOL之间的差异是比较失败的原因之一。可能还有其他的,但从这个开始。你知道吗

这是由于Python在处理文本文件时进行的行尾转换造成的。Windows EOL是两个字符(CRLF),而Unix/Linux只使用LF。虽然Windows的Notepad只识别Windows的约定,但Notepad++同时识别两者。在第一个映像中,Python是当前的OS约定;在第二个映像中,您只是传递二进制数据(您将得到Unix/Linux约定)。你知道吗

相关问题 更多 >