-1

基本的な読み取り、問題ありません:

with open('kres.csv', newline='') as f:
    reader = csv.reader(f, quoting=csv.QUOTE_ALL)
    for row in reader:
        print(row)
        kres.append(row)

ここでcsvに書き込んでいますが、行のフィールド(項目)が空の場合、列がシフトします。これは、プログラムがファイル内の列数がわからず、1つずつ書き込むためです。
しかし、空のフィールドをスキップしないようにしたいのですが、デフォルトの文字またはなしを書きたいです。フィールドが空であることを確認する方法がわかりません。

with open('kres2.csv', 'w', newline='') as f:    # Just use 'w' mode in 3.x
    writer = csv.writer(f)
    writer.writerows(kres)

Windows 7 上の Python 3.3.2

編集:リスト内のすべてのフィールドをチャクしようとしていますが、機能していません

with open('article_all_krestianin_ru.csv', newline='') as f:
    reader = csv.reader(f, quoting=csv.QUOTE_ALL)
    for row in reader:
        for i in row:
            if i == '':
                i = '-'
            print(row)
        krestianin.append(row)

編集 2: ['А теперь - про язык;Окт 21', ' 2008;Окт 21', ' 2008А теперь - про язык спрашивала', ' как ; http://www.krestianin.ru/articles/5541.php ']

これはコンソールからのもので、4 つの項目すべてが配置されています (区切り記号 ;)。そのアイテムのいずれかが 1 つまたは 2 つ欠けている可能性があるため、4 つのうち 2 つが欠けている場合は、それらの場所に「-」を付けたい

4

3 に答える 3

2

CSV モジュールが Python でどのように機能するかを理解していないと思います。kres.csvファイルに次のデータが含まれているとします。

1,2,3,4,5,6,7
a,b,c,d,e,f,g

次に、このコードを実行すると:

import csv

kres = []

with open('kres.csv') as f:
    reader = csv.reader(f, quoting=csv.QUOTE_ALL)
    for row in reader:
        print(row)
        kres.append(row)

出力は次のようになります。

['1', '2', '3', '4', '5', '6', '7']
['a', 'b', 'c', 'd', 'e', 'f', 'g']

したがって、リストを取得しています。各リストは、読み取る行です。

kres.csv ファイルにこのデータがある場合:

1,2,3,5,6,7
a,b,c,d,e,f,g

出力を次のようにする必要があります。

['1', '2', '3', '-', '5', '6', '7']
['a', 'b', 'c', 'd', 'e', 'f', 'g']

次に、行に含まれる要素の数を最初にチェックするチェックを作成する必要があります (この場合、7 未満の場合、いくつかの要素が欠落しています。その後、欠落している要素を見つける必要があります。4(この例のように)正確に after3と beforeであることを知っておく必要があります5

このチェックは Regex を使用して記述でき (もちろん、CSV ファイルにあるデータに依存します)、各要素をチェックする必要があります (右側の列の要素、リストの位置です)。

プログラムでそれを行うことができますが、CSV モジュールを使用することはできません。


CSV ファイルの空の要素は次のように表示されます。

1,2,3,,5,6,7
a,b,c,d,e,f,g

したがって、コードの出力は次のようになります。

['1', '2', '3', '', '5', '6', '7']
['a', 'b', 'c', 'd', 'e', 'f', 'g']

,,そして'',は空の要素です

于 2013-08-10T09:55:14.270 に答える
-2

コードを変更する必要はありません - すべてうまくいきます。まず、障害物の種類の検出が間違っていました。フィールドが欠落していると思っていましたが、それは Excel 2010 の既定のオープン設定でした。簡単な答え: csvは;; を正しく処理します。ファイルでは、列はシフトされません。

ただし、列は Excel のデフォルトの開き方でシフトされました: some ; Excel 2010 で正しく識別されなかったため、データは最初の列にマージされました。次のように見え'Some text;18.08.2009; ます: 検出されません。

正しくインポートする方法:

[データ] タブに移動します。 2. ファイルからのインポートを選択します。 3. インポート ウィザードで、区切り記号付きのデータを選択します。区切り記号として 5. 答えは次のとおりです。デフォルトでは、文字列は " で区切られていますが、' に変更する必要があります。

于 2013-08-10T12:58:44.837 に答える