0

次のデータをスクレイピングする Web スクレーパーがあります。

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

これは、テキスト ファイルを操作するときに Python が行う行末変換が原因で発生します。Windows の EOL は 2 文字 (CRLF) ですが、Unix/Linuxは 2 文字LFしか使用しません。Windows のメモ帳は Windows の規則のみを認識しますが、Notepad++ は両方を認識します。最初の画像では、Python は現在の OS 規則です。2 番目のイメージでは、バイナリ データを渡しているだけです (そして、Unix/Linux の規則が適用されます)。

于 2013-10-14T16:53:47.350 に答える
1

ファイルを開くときは、U フラグを使用します。

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

これは「ユニバーサル EOL」を意味し、すべての異なる EOL ( など\r\n) をに変換し\nます。EOL の違いは、比較が失敗する理由の 1 つです。他にもあるかもしれませんが、まずはこれから。

于 2013-10-14T16:55:31.063 に答える
0

メモ帳の改行は必要ありません'\r'か?

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

比較を行う前に、削除して\rみてください。\n目に見えないものを気にしないのであれば、余分な空白を削除するために文字列で .strip() を実行することも役立ちます。

于 2013-10-14T16:50:58.200 に答える