2017-11-02 11 views
1

複数のテキストファイルを1つのCSVファイルに変換したい。テキストの名前は(file1.txt、file2.txt .... file1000.txt)です。1000テキストファイルを1つのCSVファイルに変換する

Employee id: us51243 
Employee name: Mark santosh 
department:engineering 
Age:25 

私はouputをしたい:テキストファイル(FILE1.TXT)は次のようなフォーマットがある

Employee id,Employee name,department,Age 
us51243,Mark santosh,engineering,25//(file1.txt values) 
...................................//(file2.txt values) 

しかしouputをして、私は次のようにのみfile1000.txtの値を取得しています:ここで

Employee id,Employee name,department,Age 
us98621,Andy Gonzalez,Support & services,25 

は私のコードです:

import csv 
import os 
for x in range(1,1001): 
    filepath=os.path.normpath('C:\\Text\\file{}.txt'.format(x)) 
    with open(filepath) as f, open('emp.csv', 'w',newline='') as file: 
     writer = csv.writer(file) 
     val = zip(*[l.rstrip().split(': ') for l in f]) 
     writer.writerows(val) 

は親切に注意してください。また、私は一度だけ

+0

各ファイルには4つの静的フィールドしかありませんか?各ファイルに4つのフィールドを持つ1000個のファイル? – RomanPerekhrest

+3

私は古い行が毎回上書きされると思います。 '( 'emp.csv'、 'w +'、newline = '')'を使って、行を書き換えずに行を追加します。 '( 'emp.csv'、 'a'、newline = '')'もオプションになります。 – hansTheFranz

+0

@RomanPerekhrestはい、各ファイルには4つの静的フィールドしかありません – sultan

答えて

0

あなたは現在、それぞれの新しいテキストファイルのためのあなたのファイルを再開していますすべてのコンテンツが上書きされています。また、あなたはあなたのテキストが:として区切り文字を指定すると、余分なスペースをスキップして、あまりにもファイルを読むためにCSVライブラリを使用することができます。

import csv 
import os 

header = ["Employee id", "Employee name", "department", "Age"] 

with open('emp.csv', 'w', newline='') as f_output: 
    csv_output = csv.writer(f_output) 
    csv_output.writerow(header) 

    for x in range(1, 1001): 
     filepath = os.path.normpath(r'C:\Text\file{}.txt'.format(x)) 

     with open(filepath, 'r', newline='') as f_text: 
      csv_text = csv.reader(f_text, delimiter=':', skipinitialspace=True) 
      csv_output.writerow(row[1] for row in csv_text) 
0

ヘッダ(従業員ID、従業員名、部署、年齢)を表示する次のことを試してみてください。

import csv 
import os 

FIELDS = ('Employee id', 'Employee name', 'department', 'Age') 

def read_file(file, keys): 
    output = dict.fromkeys(keys) 
    for line in file: 
     line = line.rstrip().split(': ') 
     output[line[0]] = line[1] 
    return output 

with open('emp.csv', 'w', newline='') as destiny: 
    writer = csv.DictWriter(destiny, FIELDS) 
    writer.writeheader() 
    for x in range(1, 1001): 
     with open(os.path.normpath('C:\\test\\file{}.txt'.format(x))) as origin: 
      writer.writerow(read_file(file, FIELDS)) 
0

まずは2つのファイルを作成してみましょう:

s1 = u"""Employee id: us51243 
Employee name: Mark santosh 
department:engineering 
Age:25""" 

s2 = u"""Employee id: us51244 
Employee name: Any santosh 
department:engineering 
Age:24""" 

with open("file1.txt", "w") as f: 
    f.write(s1) 

with open("file2.txt", "w") as f: 
    f.write(s2) 

今度は、パンダを使ってみましょう:

import pandas as pd 

# Filelist 
filelist = ["file1.txt","file2.txt"] 

# Create dataframe 
df = pd.DataFrame(columns=["Employee id","Employee name","department","Age","file"]) 


# Loop through files 
for ind,file in enumerate(filelist): 
    data = pd.read_csv(file, header=None, sep=":").iloc[:,1] 
    df.loc[ind] = data.tolist() + [file] 

df 

出力:

Employee id Employee name department Age  file 
0  us51243 Mark santosh engineering 25 file1.txt 
1  us51243 Mark santosh engineering 25 file2.txt 
関連する問題