2016-12-16 5 views
-1

私はすでにパンダでそれをどのように解決するかという質問をしていました。しかし今、私はパンダ以外のバージョンが必要です。Pythonで複数のcsvを読み込み、出力として1つのcsvを取得する方法

マイコード

import glob 
import os 

## path 
path = r'C:/x/x/Desktop/xxx/' 
all_files = glob.glob(os.path.join(path, '*.csv')) 

## column 
column_headers = ['Date', 'Time', 'Duration', 'IP', 'Request'] 

## open only one csv. -- I want to read here not only 1 file -- 
## my approach: 
## with open(all_files) as log, .... 
with open('log.csv') as log, open('out355.csv', 'w') as out: 
    out.write(';'.join(column_headers)+'\n') 
    while True: 
     try: 
      lines = [next(log).strip('\n').split(' ',4) for i in range(6)][3:] 
      out.write(';'.join(lines[1][:2]+[l[4] for l in lines])+'\n') 
     except StopIteration: 
      break 

私は、Pythonに新たなんだので、私はちょうど非常によく私の実行中のコードを変更することはできません。だから私は完全なコードを取得すると嬉しいだろう。

ありがとうございます!

+1

を動作するはず* * "私は完全なコードを取得するならば、私は喜んでいるだろう" - SOはコード作成サービスではありませんので、あなたの宿題をするためにここにはいません。 – jonrsharpe

+0

あなたは 'csv'モジュールを使う方が良いでしょう! –

+0

あなたのdownvoteありがとう、私はPythonで初心者だと書いた。そして、これは私の宿題ではありません。:) –

答えて

0

あなたが近づいているので、*.csvファイルをそれぞれ読み込んで連結する必要があります。したがって、新しいファイルを開き、globを使用して各csvファイルを読み込む必要があります。これを行う際に、各CSVファイルの末尾に改行があることを確認してください。最後の行がfile_xで、の最初のデータ行が同じ行にあることを確認してください。

from glob import glob 

with open('combined.csv', 'a') as combinedFile: 
    combinedFile.write('a,b,c,d,e\n') # Headers 
    for eachFile in glob('*.csv'): 
     if eachFile == 'combined.csv': 
      pass 
     else: 
      count = 0 
      for line in open(eachFile, 'r'): 
       if count != 0: # So that you don't read 1st line of every file if it contains the headers. 
        combinedFile.write(line) 
       count = 1 

ランタイム:

a.csv

a,b,c,d,e 
1,2,3,4,5 
6,7,8,9,10 

b.csv

a,b,c,d,e 
11,12,13,14,15 
16,17,18,19,20 

combined.csv

a,b,c,d,e  
1,2,3,4,5 
6,7,8,9,10 
11,12,13,14,15 
16,17,18,19,20 
+0

こんにちは。あなたのソリューションに感謝します!私は自分のコードに正規表現を追加したい。どこに置くべきですか?私は正規表現と一致するCSVに文字列を書き込むだけです:[\ 0-9] + [s]ありがとう! –

-1

これらの線に沿って何か動作するはずです:

with open('out355.csv', 'w') as out: 
    for csvfile in all_files: 
    with open(csvfile) as log: 
     out.write(...) 
     .. the rest of your script .. 
-1

これは

import glob 
import os 

## path 
path = r'C:/x/x/Desktop/xxx/' 
all_files = glob.glob(os.path.join(path, '*.csv')) 

## column 
column_headers = ['Date', 'Time', 'Duration', 'IP', 'Request'] 

out = open('out355.csv', 'w') 
out.write(';'.join(column_headers)+'\n') 
for file_ in all_files: 
    log = open(file_) 
    while True: 
     try: 
      lines = [next(log).strip('\n').split(' ',4) for i in range(6)][3:] 
      out.write(';'.join(lines[1][:2]+[l[4] for l in lines])+'\n') 
     except StopIteration: 
      break 
+0

あなたのソリューションに感謝します!コードgenarete新しい出力csv、列名が書かれていますが、ファイルは空です。何ができますか? –

+0

tryブロックにスクリプトに問題があります。それが単一のファイルのために働いていたらあなたに教えてもらえますか? – nilesh15

関連する問題