Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将制表符分隔的文件与不同行长度的文件水平合并_Python_Unix_Merge_Padding_Multiple Columns - Fatal编程技术网

Python 将制表符分隔的文件与不同行长度的文件水平合并

Python 将制表符分隔的文件与不同行长度的文件水平合并,python,unix,merge,padding,multiple-columns,Python,Unix,Merge,Padding,Multiple Columns,我是一个完全的编程新手,因此我为任何缺乏清晰度、极度混乱等表示歉意。我正在尝试将大量文件合并到一个文件中。每个文件用相同数量的列(13)以制表符分隔,但行数不同(~40000)。我希望最终产品包含 file1col1 file1col2 ... file1col13 file2col1 file2col2 ... file2col13 file3col1 ... etc (其中所有空格都是制表符) 只要保留了我的所有列,

我是一个完全的编程新手,因此我为任何缺乏清晰度、极度混乱等表示歉意。我正在尝试将大量文件合并到一个文件中。每个文件用相同数量的列(13)以制表符分隔,但行数不同(~40000)。我希望最终产品包含

file1col1      file1col2   ...   file1col13    file2col1      file2col2   ...   file2col13    file3col1      ...         etc
(其中所有空格都是制表符)

只要保留了我的所有列,文件的结尾可以以任何方式填充

我试图做的是在unix中简单地使用粘贴命令;然而,这并没有保留我的专栏。我试着从一堆稍有不同的问题中寻找答案,但我恐怕我是个初学者,甚至不知道怎么做。我更愿意使用unix或python来解决这个问题,但我愿意接受任何建议

提前感谢您提供的任何帮助

另外,我使用大量文件(~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查看),所有内容都变得混乱和不对齐。我不知道如何最好地表达这一点,而且我没有发布图像的声誉。

假设您的文件名列表存储在一个名为
文件名的数组中(我在命名变量时尽量不富于想象力)。如果在命令行中给出了名称,您可以简单地按照

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()
方法获取字符串列表中的元素,并使用分隔选项卡将它们连接起来。

您所说的“我的粘贴命令没有保留我的列”是什么意思?您能显示实际的命令和输出的示例吗?没有粘贴-d$'\t'f1 f2。。。fn
对你有用吗?我从41个文件开始,每个文件有13列,行数可变。那么输出将有533列和最长文件的行数。您希望在输出的末尾发生什么?您是否希望为不再具有数据的每个文件的每行生成12个选项卡(分隔13列),以及将这13列与下一个或上一个文件的列分隔开的选项卡?是的,这将是理想的,或者可以用0或其他内容填充,只要每个文件都有自己的数据对齐,感谢您提供详细的解决方案!我遇到的一个问题是,我在files.append(open(File,“r”))TypeError:强制使用Unicode:需要字符串或缓冲区,键入find,我担心我太无知了,不知道如何修复它。对不起,这是我代码中的一个错误,
open()的参数
应该是一个文件名,而不是一个已经打开的文件。另一个编辑器很好地修复了第一个
输出中的一个严重错误。write()
调用代码现在执行得很好,非常感谢您的帮助!