在python中使用组合文件

2024-05-20 22:04:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图合并600个文本文件的集合,每行看起来像

Measurement title Measurement #1

ebv-miR-BART1-3p 4.60618701
....
evb-miR-BART1-200 12.8327289

每个文件中有大约250行。每个文件都是这样格式化的,具有相同的数据头。我想做的是合并这些文件,使它看起来像这样

Measurement title Measurement #1 Measurement #2

ebv-miR-BART1-3p 4.60618701 4.110878867
....
evb-miR-BART1-200 12.8327289 6.813287556

我想知道在python中是否有一种简单的方法来剥离每个文件的第二列,然后将其附加到主文件中?我计划把每一行都拉出来,然后使用正则表达式查找第二列,并将其附加到主文件中相应的行中。有没有更有效的方法?在


Tags: 文件数据方法title计划measurementmir文本文件
3条回答

我还没有评论权限,因此需要单独回答。在

只要您确定每个文件中都有相同的度量标识(顺序并不重要,但集合应该相等),jsbueno的答案就非常有效。在

在下列情况下:

file1:
measID,meas1
a,1
b,2

file2:
measID,meas1
a,3
b,4
c,5

你会得到:

^{pr2}$

而不是期望的:

outfile:
measID,meas1,meas2
a,1,3
b,2,4
c,,5        # measurement c was missing in file1!

我使用逗号而不是空格作为分隔符以更好地显示。在

使用csv模块读取中的文件,创建度量名称的字典,并使字典中的值成为文件中值的列表。在

对于今天的台式计算机来说,这是一个很小的数据量(大约150000个测量值),因此将所有数据都保存在内存中,并将其转储到单个文件中比另一种策略更容易。如果它不适合RAM,那么使用SQL可能是一个不错的方法- 但实际上,您可以创建一个默认字典,其中每个元素都是一个列表- 阅读所有文件并将测量数据收集到字典中,并将其转储到磁盘-

# create default list dictionary:
>>> from collections import defaultdict
>>> data = defaultdict(list)
# Read your data into it:
>>> from glob import glob
>>> import csv
>>> for filename in glob("my_directory/*csv"):
...    reader = csv.reader(open(filename))
...    # throw away header row:
...    reader.readrow()
...    for name, value in reader:
...       data[name].append(value)
... 
>>> # and record everything down in another file:
... 
>>> mydata = open("mydata.csv", "wt")
>>> writer = csv.writer(mydata)
>>> for name, values in sorted(data.items()):
...    writer.writerow([name] + values)
... 
>>> mydata.close()
>>> 

相关问题 更多 >