0

大規模なプロジェクトのテスト CSV ファイルを開いて、変換、操作、および保存しようとしています。これまでのところ、ファイルを開き、リストのリストに変換して操作しました。しかし、適切な形式の CSV ファイルとして保存できません。

現時点では保存されていますが、各列の区切りは' '不明な理由のようです。私のデータセットは、販売された住宅価格/場所/日付に基づいているため、時間 (データと時間の間) と場所 (通りの名前、町などの間) に中断があるたびに、新しい列を取得します。空白を持たない他のすべてのデータ (価格、ID 番号など) はすべて同じ列に入れられ、データが台無しになります。

別の注意として、何らかの奇妙な理由で、私のcsvファイルは各行の間にいくつかの空の行を保持しています. 何が起こっているのかわかりません。

これは、コードの疑わしい部分です。

def write_new_file(lst, new_file):
'''(lst)->.CSV file
Takes a list and writes it into a .CSV file.
'''
    writer = csv.writer(new_file, delimiter=',')
    writer.writerows(lst)
    new_file.close()

シェルでの私の出力は次のとおりです。

>>> doc[0]

['{AACDC187-2E3E-4705-BCF3-0001C4187ADD},', '208000,', '28/06/2013 00:00,', 'AL23HX,', 'F,', 'N,', 'L,', '17,', ',', 'TENNYSON ROAD,', ',', 'ST ALBANS,', 'ST ALBANS,', 'HERTFORDSHIRE,']

どんな助けでも大歓迎です!

編集:私は数週間ずっとプログラミングをしてきたので、私がばかだったらごめんなさい!

編集4:

csv.reader 関数を使用するようにコードを変更しました。これはうまく機能し、プログラムをはるかに小さくします。現在は次のようになっています。

    #create an empty variable

doc= []

with open(file2, 'r') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        doc.append(row)

ここに私のシェル出力があります:

    >>> doc[0]
['{AACDC187-2E3E-4705-BCF3-0001C4187ADD}', '208000', '28/06/2013 00:00', 'AL2 3HX', 'F', 'N', 'L', '17', '', 'TENNYSON ROAD', '', 'ST ALBANS', 'ST ALBANS', 'HERTFORDSHIRE', 'A']

しかし、私のCSV出力は同じです。列は、リスト項目を区切るコンマではなく、文字列内の空白に従って区切られています。そして、行の間にまだ空の行があります。

私の書く機能は変わりません。

最終編集:解決しました!最終的には、Python ではなく calc が台無しになりました。

4

3 に答える 3

2

CSV ファイルを読み取るための Pythoncsvモジュールのデフォルトの区切り文字csv.readerはコンマです。そのため、CSV ファイルを で保存するとdelimiter=','、間違った区切り文字の値を明示的に指定しない限り、デフォルトで適切に読み込まれるはずです。

CSV ファイルの内容:

foo,bar,baz
hello world,again,and again

コード:

>>> list(csv.reader(open('test.csv', 'rb')))
[['foo', 'bar', 'baz'], ['hello world', 'again', 'and again']]

ご覧のとおり、hello worldとのスペースはand again適切に解析されます (つまり、無視されます)。

コードが意図したとおりに機能しない理由を理解するには、コード (の関連部分) をさらに表示する必要があります。

アップデート:

あなたの編集によると、CSV ファイルを解析するために独自のコードを使用しているようです。<strong>そうしないでください (特に、プログラミングや Python の初心者であれば)。組み込みcsvモジュールを使用します。

with open('test.csv', 'rb') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        ...
    # or just rows = list(reader)

さらに、あなたの CSV 解析コードは非常に効率が悪く、おそらく (または、明らかに) バグがあります。しかし、バグを見つけるために実際に調べたわけではありません。自分で見つけることができるからです (学習目的で、実際のコードでは を使用しますcsv.reader)。

より効率的な CSV 解析コードの簡単な例は次のとおりです。

with open(filename, 'rb') as f:
    rows = [line.split(',') for line in f]

...しかし、これは引用を考慮していません。引用サポートの実装はそれほど簡単ではなく、おそらく正規表現や構文解析コードを使用する必要があります。

于 2013-09-30T11:43:50.270 に答える
1

quotechar を設定して qutoting を試すこともできます。

writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
于 2013-09-30T20:10:35.820 に答える
0

問題の原因は CSV 解析コードにあると思います - データにカンマ区切りを残しているようです。

これを CSV ファイルに書き込むと、CSV モジュールはデータにコンマがあることを検出し、単一引用符文字を使用してデータを引用しているため、データを再度読み取ると、次のことが可能になります。コンマ区切りとデータ内のコンマの違いを教えてください。

コンマ区切りを削除するようにリーダーを修正すると、問題は解消されます。

于 2013-09-30T12:05:28.590 に答える