水平合并文本文件

时间:2017-08-01 17:24:10

标签: python numpy text merge

所以我有20个txt文件。 10是

A_1,A_2......A_10

和其他10个

B_1,B_2.....B_3......B_10

所以,基本上,我正在尝试合并A_1B_1A_2B_2 ........,A_10和横向B_10(这意味着如果AB各有4列,我希望输出为8)。我还想保存这10个合并文件。我是Python的新手,所以不确定如何去做。

import numpy as np
filelist=[]
filelist1=[]
for i in range(1,11):
    filelist.append("/Users/Hrihaan/Desktop/A_%s.txt" %i)
for j in range(1,11):
    filelist1.append("/Users/Hrihaan/Desktop/B_%s.txt" %j)

3 个答案:

答案 0 :(得分:1)

如果您想组合线条而不考虑内容,则不需要

import os

def path(dirname, letter, index): # build the absolute path of a single file
    return os.path.join(dirname, '{}_{}.txt'.format(letter, index))

d = 'C:/Users/Hrihaan/Desktop'
for i in range(1, 11):
    with open(path(d, 'C', i), 'w') as fout, open(
           path(d, 'A', i)) as fa, open(path(d, 'B', i)) as fb:
         for line_a, line_b in zip(fa, fb):
             fout.write(line_a.rstrip('\n') + line_b)

这不会在两者之间插入任何分隔符,如果它们是以制表符或逗号分隔的文件,则需要这些分隔符。您可以在代码的最后一行添加适当的分隔符,例如:

fout.write(line_a.rstrip('\n') + ' ' + line_b)

或者,您可以使用另一种涉及实际解析文件的方法。

答案 1 :(得分:1)

对于一对文件,首先,将文件A的内容拆分为一个行数组(由换行符'\n'字符拆分),并对文件B执行相同操作。

然后,对于文件B的每一行,将该行附加到A的相应行。如果文件A的行数与文件B的行数不同,只需用空字符串填充较短数组的其余部分,直到它们具有相同的行数(因此你将有某些东西来连接与相应的行)。

最后,通过'\n'字符加入文件A的行(现在是两个文件行的串联),并对文件B执行相同操作。

答案 2 :(得分:1)

使用pandas可以轻松解决您的问题。下面的代码将读取文件A_1 - A_10和B_1 - B_10,然后水平附加相应的文件,最后产生10个数据帧。

import pandas

dataFrames_A = []
dataFrames_B = []

# file count of each type A or B
fileCount = 10

for i in range(1,fileCount+1):
    fileName_A = 'C:/Users/Hrihaan/Desktop/A_' + str(i) + '.txt'
    fileName_B = 'C:/Users/Hrihaan/Desktop/B_' + str(i) + '.txt'

    dataFrames_A.append(pandas.read_csv(fileName_A, sep='\t', encoding='utf-8'))
    dataFrames_B.append(pandas.read_csv(fileName_B, sep='\t', encoding='utf-8'))

mergedDataFrames = []
for i in range(0,fileCount):
    mergedDataFrames.append(pandas.concat([dataFrames_A[i], dataFrames_B[i]], axis=1))

for i, dataFrame in enumerate(mergedDataFrames):
    fileName = 'C:/Users/Hrihaan/Desktop/A_B_' + str(i+1) + '.txt'
    dataFrame.to_csv(fileName, sep='\t', encoding='utf-8')