1

Im trying to read 3 text files and combine them into a single output file. so far so good, the only problem is that I need to create columns for every file i read. right now I have all the extracted data from the files in a single column.

  #!/usr/bin/env python

    import sys
    usage = 'Usage: %s infile' % sys.argv[0]

    i=3 #start position
    outfile = open('outfil.txt','w')

    while i<len(sys.argv):
        try:
            infilename = sys.argv[i]
        ifile = open(infilename, 'r')

        outfile.write(infilename+'\n')
        for line in ifile:
            outfile.write(line) 
            print line 
        except:
            print usage; sys.exit[i]

        i+=1; 

right now my output file looks like this:

test1.txt
a
b
c
d
test2.txt
e
f 
g
h
test3.txt
i
j
k
l
4

2 回答 2

1

依次打开输入文件,将数据收集到列表列表中。然后,zip()数据和写入器通过csv写入器以空格作为分隔符:

#!/usr/bin/env python
import csv
import sys

usage = 'Usage: %s infile' % sys.argv[0]

data = []
for filename in sys.argv[1:]:
    with open(filename) as f:
        data.append([line.strip() for line in f])

data = zip(*data)
with open('outfil.txt', 'w') as f:
    writer = csv.writer(f, delimiter=" ")
    writer.writerows(data)

假设你有:

  • 1.txt内容如下:

    1
    2
    3
    4
    5
    
  • 2.txt内容如下:

    6
    7
    8
    9
    10
    

然后,如果您将代码保存到test.py并运行为python test.py 1.txt 2.txtoutfil.txt您将获得:

1 6
2 7
3 8
4 9
5 10
于 2013-09-16T18:38:51.927 回答
1
$ cat a
1
2
3
4
5
6
7
8
9
10

$ cat b
51
52
53
54
55
56
57
58
59
60


>>> import itertools
>>> for (i,j) in itertools.izip(open('a'), open('b')):
...     print i.strip(), '---', j.strip()
...
1 --- 51
2 --- 52
3 --- 53
4 --- 54
5 --- 55
6 --- 56
7 --- 57
8 --- 58
9 --- 59
10 --- 60


>>>
于 2013-09-16T18:45:52.910 回答