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

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

我的文件是一个数据文件,每行有一个整数,一个字符串和一个浮点数,我需要比较第一个int与其他ints和float与其他值,我需要有值作为数字,而不是作为部分的字符串来执行一些数学运算。

这是我已经完成的代码,但是我查看了所有的Google,并且找不到这样做的函数:

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

希望你们能够帮助我,甚至一些关于如何去分割字符串和比较值的一般指导方针将非常感谢。


伊格纳西奥的回答基本上完全正确,他甚至在我开始打字之前就发布了它。 但是,让我更详细地解释他的双线。

读取文件

首先,对你的代码进行批评:

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

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

readfile = open('file_being_read.dat')

现在,当你遍历这个文件对象时,你将逐行读取文件。

Tokenising

你已经发现迭代一个文件可以逐行读取文本。 现在你需要将每行分成这三个值。

如果这些值由空格分隔(如数据文件摘录),Python使用str.split方法变得非常简单。

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

这些值之间的空格的任何数量或类型(制表符,空格)都可以。 事实上,即使是后面的换行符也会被剥离。 所以现在你有三个字符串的列表。

解读

接下来,您需要将字符串转换为整数和浮点数。 在这里,使用内置的函数intfloat

>>> 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

vals = line.split()
converted.append((int(vals[0]), vals[1], float(vals[2])))
链接地址: http://www.djcxy.com/p/40897.html

上一篇: Dividing a string by type of data inside each line of file in python

下一篇: What are metaclasses in Python?