按列添加5个文本文件

时间:2016-11-28 09:01:52

标签: python python-3.x csv append multiple-columns

我想添加4行文本文件的所有行,并且输出文件包含5列。我的一个文件有两列。我试着用csv.reader做到这一点,但我无法得到正确的结果。此刻我正在研究这段代码:

from os import walk
import csv
mypath = 'C:\\Users\\files to append'     
o_data = []
files = []
for (dirpath, dirnames, filenames) in walk(mypath):
    files.extend(filenames)
    break
print(files)
for afile in files:
    file_h=open(afile)
    a_list = []
    a_list.append(file_h.read())
    csv_reader = csv.reader(file_h, delimiter = ' ')
    for row in csv_reader:
        a_list.append(row[0])
    o_data.append((n for n in a_list))
    file_h.close()

with open('output.dat', 'w') as op_file:
    csv_writer = csv.writer(op_file, delimiter = ' ')
    for row in list(zip(*o_data)):
        csv_writer.writerow(row)

我的五个文本文件看起来像这样,具有不同的值:

SCALAR
ND   9418
ST  0
TS     45000.34
0.0000
100.02

结果应该是这样的(4个标题和5个列数):

SCALAR SCALAR SCALAR SCALAR  
ND   9418 ND   9418 ND   9418 ND   9418 
ST  0 ST  0 ST  0 ST  0 ST  0 
TS 45000.34 TS 45000.34 TS 45000.34 TS 45000.34 
0.0000 1.0000 2.4344 4.5656 81.2123
100.02 123.32 333.85 435.33 987.11

我很感激任何愚蠢。

尝试2

我试着以其他方式重写它。所以这是我的解决方案,但它无法正常工作。我无法理解为什么它不能重命名" output1.out"到" output.out"

这是代码:

导入os

""" 请将所有必要的数据放入目录 """

f = []
for file in os.listdir('C:\\Users\\Append'):
    if file.endswith(".dat"):
        f.append(file)
        print(file)
        os.rename(file,"input.dat")
        file = file.rsplit('.', 1)[0]
        print(file)
        with open("output.out", "r") as textfile1, open("input.dat", "r") as textfile2,\
             open("output1.out", "w") as out:
            for x, y in zip(textfile1, textfile2):
                x = x.strip()
                y = y.strip()
                print("{0} {1}".format(x, y), file = out)
                print(fname)
         os.rename("input.dat", file+".txt")
    os.rename("output1.out", "output.out" )
print(f) # just for checking

1 个答案:

答案 0 :(得分:1)

以下内容应该可以满足您的需求。它不是使用android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" android:src="@drawable/icon" app:backgroundTint="@color/accent" app:borderWidth="0dp" /> ,而是使用os.walk()来获取合适的文件列表,例如glob.glob()表示所有dat文件,或者您可以使用*.dat,具体取决于您的文件名。

它将每个文件读入i*.dat列表,然后使用data技巧将列行读取为行列。然后使用zip(*data)将每行的每个列表组合成一个列表,并将其写入输出CSV文件,并将空格作为分隔符。

chain.from_iterable()

给你类似的东西:

from itertools import chain
import glob
import csv

with open('output.csv', 'w', newline='') as f_output:
    csv_output = csv.writer(f_output, delimiter=' ')
    data = []

    for filename in glob.glob('c*.txt'):
        with open(filename, newline='') as f_input:
            csv_input = csv.reader(f_input, delimiter=' ', skipinitialspace=True)
            data.append(list(csv_input))

    for row in zip(*data):
        csv_output.writerow(chain.from_iterable(row))