0

我有一个网络爬虫抓取以下数据:

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

它不识别数据是相同的,它重新保存文件

有人知道怎么修这个东西吗?

提前致谢 - Hyflex

4

3 回答 3

1

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

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

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

于 2013-10-14T16:55:31.063 回答
1

这是由于 Python 在处理文本文件时所做的行尾转换。Windows EOL 是两个字符 (CRLF),而 Unix/LinuxLF仅使用。虽然 Windows 的记事本只识别 Windows 的约定,但 Notepad++ 两者都识别。在第一张图片上,Python 是当前的操作系统约定;在第二张图片中,您只是传递二进制数据(并且您将获得 Unix/Linux 约定)。

于 2013-10-14T16:53:47.350 回答
0

'\r'记事本不需要回车吗?

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

在进行比较之前,您可以尝试剥离\r和。\n如果您不关心不可见的东西,即使在您的字符串上运行 .strip() 以删除额外的空格也会有所帮助。

于 2013-10-14T16:50:58.200 回答