所以我有20个txt文件。 10是
A_1,A_2......A_10
和其他10个
B_1,B_2.....B_3......B_10
所以,基本上,我正在尝试合并A_1
和B_1
,A_2
和B_2
........,A_10
和横向B_10
(这意味着如果A
和B
各有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)
答案 0 :(得分:1)
如果您想组合线条而不考虑内容,则不需要numpy:
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')