2017-02-21 4 views
0

私は、さまざまな列の場所で異なるファイルを摂取する必要があるという問題があります。 1つのファイル列は4行下に開始し、別のファイル列は1行目で開始する場合があります。フォルダ内のさまざまな種類のcsvファイルの列見出しを検索するにはどうすればよいですか?

1つのファイルは次のようになります。

This 
is 
a 
column 1, column 2, column 3, column 4 

もう一つは、1行目に、このような列があるとします。

column 1, column 2, column 3 

は、私はすべてのファイルの列ヘッダーのリストを取得する必要があります。私は、列見出しを3つ以上の項目と見なします。もし私がcsvモジュールを使用しているなら、これをどのように書くことができますか?

私のようなものがあります。それはまた、1つの文字列を含む列を返しているので、これは非常に機能していない

temprow = next(csvfile) 

for value in temprow: 
    if value == '': 
     temprow = next(csvfile) 
    if len(value) > 3: 
     header = temprow 
    else: 
     header = temprow 

を。

+0

あなたの 'if'ステートメントと' else'ステートメントは同じコードを実行します。 – PrestonH

答えて

1

これを試してみてください:

with open('yourfile.csv', 'r') as f: 
    for line in f:      # iterate for each line 
     if "," in line:     # the header line should contain comma  
      header = line   
      break       # break the loop when header line is found 

print(header) 

出力

:あなたのポストでの仕様によると

column 1, column 2, column 3, column 4 
-1

は、このコードは動作します。 4つ以上の要素(3つ以上の要素)を持つ.csvファイルの最初の行を返します。

headers = []          # Column names will be appended to this list 
files = ['./test']         # Insert files here 

for f in files:          # Loop over files 
    with open(f, 'r') as fh:      # Open file 
     reader = csv.reader(fh, delimiter = ',') # Create reader 
     for row in reader:       # Loop over rows 
      if len(row) >= 4:      # Criteria for appending to headers 
       headers.append(row) 
+0

Python 2または3のcsvファイルを正しく開くことができません。マニュアルの例を参照してください。 – martineau

+0

おそらく、 'headers.append(row)'ステートメントの後に 'break'が必要です。さらに、これは関数ではないので、最後の 'return headers'はエラーです。 – martineau

+0

@Martineau 'break 'はヘッダ行であるという基準を1行だけ満たしている限り追加する必要はありません。このコードは、OPが動作しているファイルの種類に関する基本的な前提のもとで同じ結果を達成します。 'csv'モジュールの面では、これがどうやって正しいのか分かりません。 [このリンク](https://docs.python.org/2/library/csv.html#module-contents)の最初の例を参照してください。私が気付く唯一のことは、 'quotechar'オプションの引数です。代わりに 'return'部分を編集して編集しましたが、OPを信頼すれば、この部分をどのように処理するのかがわかります。 – PrestonH

関連する問題