Python-导入多个文件到一个.csv文件(Python- Import Multiple Fil

2019-09-16 16:47发布

我有一个包含两列125个的数据文件和21行数据,我想将它们导入到一个.csv文件(如125列对只有21行)。 这就是我的数据文件,如下所示:

我是相当新的蟒蛇,但我想出了下面的代码:

import glob
Results = glob.glob('./*.data')
fout='c:/Results/res.csv'
fout=open ("res.csv", 'w')
 for file in Results:
 g = open( file, "r" )
 fout.write(g.read())
 g.close() 
fout.close()

与上面的代码的问题是,所有的数据将被复制到只有两列与125个* 21行。

很感谢任何形式的帮助!

Answer 1:

这应该工作:

import glob

files = [open(f) for f in glob.glob('./*.data')] #Make list of open files
fout = open("res.csv", 'w')

for row in range(21):
    for f in files:
        fout.write( f.readline().strip() ) # strip removes trailing newline
        fout.write(',')
    fout.write('\n')

fout.close()

请注意,如果你尝试了大量文件,这种方法可能会失败,我相信在Python默认限制为256。



Answer 2:

你可能想尝试Python的CSV模块(http://docs.python.org/library/csv.html),它提供了读取和写入的CSV文件非常有用的方法。 既然你说你要只有21数据的250列的行,我建议建立21名Python列表作为行,然后通过自己的文件数据附加到每一行,你循环。

就像是:

import csv

rows = []
for i in range(0,21):
    row  = []
    rows.append(row)

#not sure the structure of your input files or how they are delimited, but for each one, as you have it open and iterate through the rows, you would want to append the values in each row to the end of the corresponding list contained within the rows list.

#then, write each row to the new csv:

writer = csv.writer(open('output.csv', 'wb'), delimiter=',')
for row in rows:
    writer.writerow(row)


Answer 3:

(对不起,我不能添加评论,但。)

[编辑以后,下面的语句是错误!]“ 的davesnitty的产生的行回路可以被替换rows = [[]] * 21 ”。 这是错误的,因为这将创建空列表清单中,但空列表是由外部列表中的所有元素共享一个单一的空单。

我的+1使用标准的CSV模块。 但是,文件应始终关闭 - 尤其是当你打开很多人认为。 此外,有一个bug。 即使你只在这里写的结果 - 从通过的文件中读取行。 该解决方案实际上是缺失的。 基本上,从文件中读取该行应被追加到相关的行号子列表。 行号应通过枚举(读取器),其中阅读器是csv.reader获得(翅片,...)。

[后来添加]试试下面的代码,解决您的puprose的路径:

import csv
import glob
import os

datapath = './data'
resultpath = './result'
if not os.path.isdir(resultpath):
   os.makedirs(resultpath)

# Initialize the empty rows. It does not check how many rows are
# in the file.
rows = []

# Read data from the files to the above matrix.
for fname in glob.glob(os.path.join(datapath, '*.data')):
    with open(fname, 'rb') as f:
        reader = csv.reader(f)
        for n, row in enumerate(reader):
            if len(rows) < n+1:
                rows.append([])  # add another row
            rows[n].extend(row)  # append the elements from the file

# Write the data from memory to the result file.
fname = os.path.join(resultpath, 'result.csv')
with open(fname, 'wb') as f:
    writer = csv.writer(f)
    for row in rows:
        writer.writerow(row)


文章来源: Python- Import Multiple Files to a single .csv file