Skip to main content
 首页 » 编程设计

python之在python中的每行文件中按数据类型划分字符串

2025年05月04日26lovecherry

可以肯定地说,我是编程和 Python 的新手,所以我真的需要帮助来处理文件。

我的文件是一个 dat 文件,每一行都有一个整数、一个字符串和一个 float ,我需要将第一个整数与其他整数进行比较,并将 float 与其他值进行比较,我需要将这些值作为数字和不作为执行某些数学运算的字符串的一部分。

这是我完成的代码,但我搜索了所有谷歌,但找不到执行此操作的函数:

readfile = open('file_being_read.dat').read() 
 
def parsa_lista(file_to_read): 
    converted = [] 
    for line in file_to_read: 
       #conversion should happen here and write it to the list named "converted"  
       #my google-fu has failed me.. 
    return converted 
 
print parsa_lista(readfile) 

文件看起来像这样,但跨越了大约 600 行。另外,我是在边学边学的基础上做的,我真的找不到帮助,这可能与缺乏一些数据类型或其他方面的基础知识有关。

这是列表的输出,用“%r”打印:

... 
249 LEU 89.81637573242188\n 
250 ALA 6.454087734222412\n 
251 ILE 42.696006774902344\n 
252 VAL 39.9482421875\n 
253 LEU 58.06844711303711\n 
254 SER 6.285697937011719\n 
255 HIS 22.92508316040039\n 
256 THR 49.1857795715332\n 
257 ASN 15.033650398254395\n 
258 SER 12.086835861206055\n 
259 VAL 28.70435905456543\n 
260 VAL 39.53983688354492\n 
261 ASN 18.63718605041504\n 
262 PRO 15.275177955627441\n 
263 PHE 120.84526062011719\n 
264 ILE 26.20943260192871\n 
265 TYR 16.6826114654541\n 
266 ALA 34.382598876953125\n 
267 TYR 179.9381103515625\n 
268 ARG 77.62599182128906\n 
269 ILE 45.021034240722656\n 
270 ARG 133.72328186035156\n 
... 

希望你们能帮助我,即使是关于我应该如何处理字符串拆分和比较值的一些一般性指导方针也将不胜感激。

请您参考如下方法:

Ignacio's answer基本上是完全正确的,他甚至在我开始打字之前就发布了。但是,让我更详细地解释一下他的双线。

读取文件

首先,对您的代码的评论:

readfile = open('file_being_read.dat').read() 

这会将您的整个文件读出为一个巨大的字符串。当您尝试遍历此字符串时,您将逐个字母地遍历它。将该行改为:

readfile = open('file_being_read.dat') 

现在,当您遍历此文件对象时,您将逐行读取文件。

代币化

您发现遍历文件可以逐行获取文本。现在您需要将每一行拆分为这三个值。

如果值由空格分隔(如您的数据文件摘录),Python 使用 str.split method 使这变得非常容易.

>>> line 
'249 LEU 89.81637573242188\n' 
>>> line.split() 
['249', 'LEU', '89.81637573242188'] 

这些值之间的任何数量或类型(制表符、空格)的空白都可以。事实上,即使是尾随的换行符也会被删除。所以现在你有一个包含三个字符串的列表。

口译

接下来您需要将字符串转换为整数和 float 。在这里,使用内置函数 int和 float .

>>> vals[0] 
'249' 
>>> int(vals[0]) 
249 
>>> vals[2] 
'89.81637573242188' 
>>> float(vals[2]) 
89.816375732421875 

此时,你只需要将这些值打包成一个元组,并将它们添加到converted即可。

datum = int(vals[0]), vals[1], float(vals[2]) 
>>> datum 
(249, 'LEU', 89.816375732421875) 

为什么是元组而不是列表?列表是可变的:您可以添加和删除元素。这可能不是您需要的。

(您可能经常会在元组字面量周围看到圆括号。这是少数情况之一,因为操作顺序使它们变得不必要。您可以将大括号放在赋值的整个右侧,它会工作得很好。)

把它放在一起

def parsa_lista(file_to_read): 
    converted = [] 
    for line in file_to_read: 
        vals = line.split() 
        datum = int(vals[0]), vals[1], float(vals[2]) 
        converted.append(datum) 
    return converted