我是一个完整的编程新手,所以我为任何缺乏清晰度,极端混乱等道歉。我想要做的是将大量文件合并到一个文件中。每个文件以制表符分隔,具有相同数量的列(13),但行数不同(~40000)。我希望最终产品包含
file1col1 file1col2 ... file1col13 file2col1 file2col2 ... file2col13 file3col1 ... etc
(所有空格都是标签)
只要保留了所有列,就可以以任何方式填充文件的末尾。
我想要做的只是在unix中使用paste命令;但是,这并没有保留我的专栏。我尝试从一堆略有不同的问题中解析解决方案,但我担心我是一个初学者,我甚至不知道该怎么做。我更愿意使用unix或python来解决这个问题,但我愿意接受任何建议。
提前感谢您提供的任何帮助!
P.S。我使用大量文件(~40)这样做,所以如果输入可以使用相同扩展名的给定目录中的所有文件,那将是理想的。
编辑:paste -D$'\t' *.b > merge
适用于文件的第一部分,输出
9 13577718 0 0 0 1 0 0 0 0 0 0 0 9 13576563 1 0 0 0 0 0 0 0 0 0 0 9 13577772 0 0 1 0 0 0 ...etc across
在文件的末尾(使用tail查看),一切都变得混乱和错位。我不确定如何最好地代表这一点,我没有发布图像的声誉。
答案 0 :(得分:1)
假设您的文件名列表存储在名为filenames
的数组中(我在命名变量时尽量不要想象)。如果在命令行上给出了名称,则可以将其创建为
filenames = sys.argv[1:]
你要问的一种方法如下。
output = open("yourfile.txt", "w")
files = []
for filename in filenames:
files.append(open(filename, "r"))
num_files = len(files)
num_empty = 0
while True:
num_empty = 0
line = []
for file in files:
item = file.readline() # returns empty string after EOF
if not item:
item = "None" # or other marker value
num_empty += 1
line.append(item)
if num_empty == num_files:
break
output.write("\t".join([x.strip() for x in line]))
output.write("\n")
for file in files:
file.close()
output.close()
.strip()
方法调用删除任何无关的空格,包括出现在Python读取的文本行末尾的新行作为标准。 .join()
方法使用字符串列表的元素将它们与分隔标签连接起来。