从nonCSV文件读取数据

2024-05-17 15:11:00 发布

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

我在一个文本文件中有如下数据:

2,20 12,40 13,100 14,300
15,440 16,10 24,50 25,350
26,2322 27,3323 28,9999 29,2152
30,2622 31,50

我想在Python中将这些数据读入两个不同的列表中。但是,这不是一个CSV文件。数据的读取方式如下: mass1,intensity1 mass2,intensity2 mass3,intensity3...

我该如何把群众和强度分成两个不同的列表呢?我试图避免写这个文件,使数据更整洁和/或以CSV格式。在


Tags: 文件csv数据列表方式中将文本文件强度
2条回答

看起来你可以line.split()每一条线来分离单独的线对,然后使用pair.split(",")来分离每对线中的质量和强度。在

假设输入文件如下所示

#this is header
#this is header
#this is header
2,20 12,40 13,100 14,300
15,440 16,10 24,50 25,350
26,2322 27,3323 28,9999 29,2152
30,2622 31,50

您可以使用re

方法1

如果文件真的很大

^{pr2}$

方法2

我还想指出的是,如果文件不是太大,那么就一次性地读取它

f = open('xydata.txt', 'r')
header_len = 3
for i in xrange(header_len): # skip the header lines
    f.readline()
data_str = f.read().replace('\n','') # read from current file pos to end of file and replace new line chars

data_xy_str = re.findall( '[0-9]+,[0-9]+', data_str)
my_xys      = [ xy_maker(xy_str) for xy_str in data_xy_str ]
# yields the same result as above
mass_results = []
intensity_results = []

with open('in.txt', 'r') as f:
    for line in f:
        for readings in line.split(' '):
            mass, intensity = readings.split(',')
            mass_results.append(int(mass.strip()))
            intensity_results.append(int(intensity.strip()))

print('Mass values:')
print(mass_results)
print('Intensity values:')
print(intensity_results)

产量:

^{pr2}$

相关问题 更多 >