Skip to main content
 首页 » 编程设计

PYTHON之从文件中读取单行

2025年05月04日15myhome

我是几个小时的 python 新手,我正在尝试编写一个脚本,该脚本从一个文件(名为“peaks.dat”)中读取一组 x、y 坐标并将它们填充到一个列表(类类型);我正在定义以下内容:

class point(): 
    def _init_(self,x=None,y=None,k=None,f=None): 
        self.x=0    # x coordinate 
        self.y=0    # y coordinate 
        self.k=0    # I need these for later stuff 
        self.f=-1   # I need these for later stuff 

但后来我找不到任何方法从文件中的一行(即,仅来自两列之一的元素)而不是整行“挑选”单个元素。有这种事吗?

无论如何,我尝试将我的列拆分为两个不同的文件 x.dat 和 y.dat,但后来我完全不知道如何从文件中分别填充我的“点”类型列表的 x 和 y 字段。 我试过了

f=open('x.dat','r') 
mylist=[] 
for line in f: 
    mylist.append(point(line, , , )) # wrong syntax D: 
f.close() 
 
for data in mylist: 
    print i.x 

计划稍后对 y.dat 文件进行相同的处理,但在很多层面上似乎都是错误的。

附注如果你想举个例子,我来自一些 C++。

编辑:peaks.dat 只是三列(我只需要前两列)数字,类似于

1.2   1.6   0.4 
1.5   2.1   0.3 
1.1   1.0   0.5 

等等

x.dat(或 y.dat)是单行数字。

请您参考如下方法:

根据文件的格式,您可以使用 csv 模块,或者使用 str.split() 函数。

对于一行中以空格分隔的值,使用 str.split():

points = [] 
 
with open(inputfilename) as infile: 
    for line in infile: 
        row = [int(i) for i in line.split()] 
        # row is now a list of integers. 
        points.append(point(*row)) 

对于其他格式,通常是 csv module是最好的选择:

import csv 
 
points = [] 
 
with open(inputfilename, 'rb') as infile: 
    reader = csv.reader(infile, delimiter='\t')  # tab delimited file 
    for row in reader: 
        row = [int(i) for i in row] 
        # row is now a list of integers. 
        points.append(point(*row)) 

要只读取两行,请使用 next() 两次; csv 版本:

    for _ in range(2): 
        row = [int(i) for i in next(reader)] 
        # row is now a list of integers. 
        points.append(point(*row)) 

next() 从迭代器中获取下一项; infile 对象和 reader 对象都是生成文件行或 CSV 行的迭代器。

或者,使用 itertools.islice() utility :

for row in islice(reader, 2):  # only yield the first two rows.