首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >横向合并文本文件

横向合并文本文件
EN

Stack Overflow用户
提问于 2017-08-01 17:24:10
回答 3查看 1.4K关注 0票数 0

我有20个txt文件。10人

代码语言:javascript
运行
复制
A_1,A_2......A_10

剩下的10个是

代码语言:javascript
运行
复制
B_1,B_2.....B_3......B_10

因此,基本上,我试图将A_1B_1A_2B_2.、A_10B_10横向合并(这意味着如果AB中各有4列,我希望输出有8列)。我还想保存这10个合并的文件。我在Python方面真的很新,所以不知道该怎么做。

代码语言:javascript
运行
复制
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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-01 17:54:18

你的问题可以很容易地用熊猫解决。下面的代码将读取文件A_1 - A_10和B_1 - B_10,然后水平地追加相应的文件,最终生成10个数据帧。

代码语言:javascript
运行
复制
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')
票数 2
EN

Stack Overflow用户

发布于 2017-08-01 17:36:52

如果您只想组合行而不考虑内容,则不需要numpy

代码语言:javascript
运行
复制
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)

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

代码语言:javascript
运行
复制
fout.write(line_a.rstrip('\n') + ' ' + line_b)

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

票数 1
EN

Stack Overflow用户

发布于 2017-08-01 17:38:57

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

然后,对于B文件的每一行,将该行追加到A的对应行中。如果文件A的行数与B文件不同,那么只需用空字符串填充其余的较短的数组,直到它们有相同的行数(因此您可以将其与相应的行连接起来)。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45444184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档