0

.csv ファイルの一連のデータを [ [a,b,c,d], [e,f,g,h], ...] の形式の配列に読み込もうとしています。

以下のコードを実行すると、スペース (' ') を含むエントリを出力すると、最初のスペース (' ') で停止するため、要素にアクセスする方法が正しくありません。たとえば、Business、Fast Company、Youtube、fastcompany が 10 番目のエントリである場合...以下を印刷すると、別の行になります: Business,Fast Company,YouTube,FastCompany

結果として取得する方法についてのアドバイス: [ [a,b,c,d], [Business, Fast Company, Youtube, fastcompany], [e,f,g,h], ...]?

import csv

partners = []
partner_dict = {}
i=9
with open('partners.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    for row in spamreader:
        partners.append(row)

    print len(partners)

    for entry in partners[i]:
        print entry
4

2 に答える 2

2

引数はdelimiter、ファイルの各行を個別の値に分割するために使用する文字を指定します。' ' (スペース) を渡しているため、リーダーはスペースで分割しています。

これが実際にカンマ区切りのファイルである場合は、区切り文字として「,」を使用します (またはdelimiter引数を省略して、デフォルトで「,」にします)。

また、パイプ文字は引用符文字としては珍しい値です。入力ファイルに引用符の代わりにパイプが含まれているというのは本当ですか? 提供したサンプル データには、パイプ引用符も含まれていません。

于 2012-10-10T15:10:01.777 に答える
0

コードにはいくつかの問題があります。

  • リストを反復するための「正しい」構文はfor entry in partners:、ではなくfor entry in partners[i]:
  • コード内のpartners_dict変数は未使用のようです。後で使用することになると思いますので、今のところ無視します
  • テキストファイルをバイナリとして開いています(open(file_name, "r")代わりに使用しますopen(file_name, "rb")
  • 処理されたデータの処理は、コンテキスト マネージャー ( with ... [as ...]:-block)内で行われます。
  • 入力テキストは で区切られているようですが、解析時に", "は で区切られます" "

私があなたの質問を正しく理解していれば、あなたの問題は最後の問題が原因のようです. 「明白な解決策」は、おそらくdelimeter引数をに変更する", "ことですが、モジュールによって区切り文字として許可されるのは単一文字の文字列のみです。どうしようか?まあ、それ","は本当に「真の」区切り文字であるため(スペースとは対照的に、実際の引用符で囲まれていないデータ内にあることは決して想定されていません)、それは良い解決策のように思えます. ただし、すべての値" "は、おそらくあなたが望むものではないものから始まります。それで、あなたは何をしますか?さて、すべての文字列には、strip()デフォルトで文字列の最初と最後にあるすべての空白を削除する、かなりきちんとしたメソッドがあります。するstrip()すべての値、「リスト内包表記」(リスト内のすべての項目の式を評価し、新しい値を持つ新しいリストを返す) を使用しましょ[i.strip() for i in row]partners

最終的に、コードは次のようになります。

import csv

partners = []

with open('partners.csv', 'r') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')
    for row in spamreader:
        partners.append([i.strip() for i in row])

print len(partners)

for entry in partners:
    print entry
于 2012-10-10T15:41:50.323 に答える