Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,按文件每行中的数据类型划分字符串_Python_String_List_Types_Split - Fatal编程技术网

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

在python中,按文件每行中的数据类型划分字符串,python,string,list,types,split,Python,String,List,Types,Split,可以肯定地说,我是编程和python方面的高手,所以我真的需要帮助处理文件 我的文件是一个dat文件,每行有一个整数、一个字符串和一个浮点,我需要将第一个int与其他int进行比较,将浮点与其他值进行比较,我需要将值作为数字,而不是字符串的一部分来执行一些数学运算 这是我编写的代码,但是我在谷歌搜索了所有的代码,我找不到一个函数可以做到这一点: readfile = open('file_being_read.dat').read() def parsa_lista(file_to_read)

可以肯定地说,我是编程和python方面的高手,所以我真的需要帮助处理文件

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

这是我编写的代码,但是我在谷歌搜索了所有的代码,我找不到一个函数可以做到这一点:

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 ... 希望你们能帮助我,即使是一些关于如何分割字符串和比较值的一般指导原则也会非常感激

基本上是完全正确的,在我开始打字之前,他就发布了。不过,让我更详细地解释一下他的两句话

vals = line.split()
converted.append((int(vals[0]), vals[1], float(vals[2])))
读取文件 首先,对您的代码进行评论:

readfile = open('file_being_read.dat').read()
这将把你的整个文件读成一个巨大的字符串。当您尝试迭代这个字符串时,您将一个字母一个字母地迭代它。将该行改为:

readfile = open('file_being_read.dat')
现在,当您迭代这个文件对象时,您将逐行读取文件

标记化 您已经发现,在文件上进行迭代可以获得逐行文本。现在需要将每一行拆分为这三个值

如果像您的数据文件摘录一样,这些值由空格分隔,那么Python就可以很容易地使用

任何数量或类型选项卡,这些值之间的空格都可以。事实上,即使是尾随的新行也会被剥离。现在你有了三个字符串的列表

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

此时,您只需要将这些值打包成一个元组,并将它们添加到转换后的值中

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

您可能通常会在元组文字周围看到括号。这是为数不多的操作顺序使它们变得不必要的情况之一。你可以在作业的整个右侧用大括号括起来,这样就可以了

把它放在一起 基本上是完全正确的,在我开始打字之前他就把它贴出来了。不过,让我更详细地解释一下他的两句话

读取文件 首先,对您的代码进行评论:

readfile = open('file_being_read.dat').read()
这将把你的整个文件读成一个巨大的字符串。当您尝试迭代这个字符串时,您将一个字母一个字母地迭代它。将该行改为:

readfile = open('file_being_read.dat')
现在,当您迭代这个文件对象时,您将逐行读取文件

标记化 您已经发现,在文件上进行迭代可以获得逐行文本。现在需要将每一行拆分为这三个值

如果像您的数据文件摘录一样,这些值由空格分隔,那么Python就可以很容易地使用

任何数量或类型选项卡,这些值之间的空格都可以。事实上,即使是尾随的新行也会被剥离。现在你有了三个字符串的列表

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

此时,您只需要将这些值打包成一个元组,并将它们添加到转换后的值中

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

您可能通常会在元组文字周围看到括号。这是为数不多的操作顺序使它们变得不必要的情况之一。你可以在作业的整个右侧用大括号括起来,这样就可以了

把它放在一起
这个解释帮助很大,谢谢,我真的需要一些关于数据处理的建议。我还有几个问题,在每一行中创建数据会覆盖元组,最终结果就是最后一行的元组。附加每一行以创建元组列表,或者以某种方式创建包含相对于每一行的数据的元组,这是一种好的做法吗?也许我可以附加到一个列表,然后从列表中创建一个元组,但这似乎不是一个好的做法。我添加了完整的parsa_lista函数。正如我之前所说,伊格纳西奥基本上有正确的答案;我只是更详细地解释一下。最终结果是一个元组列表似乎是完全可以接受的。然而,出于好奇,第一列只是行号吗?如果是这样,它可能会被安全地安装;列表可以通过索引访问
. 例如,converted[224]是转换列表中的第225个元素。是的,它是,但它也用于进行一些测试和输出,所以我选择保留它并输出所有正确的行号。这个列表也是从0开始的,所以我选择使用您的代码并对其进行一些修改,使第一列以数字表示其值,如:>datum=intvals[0]+1,vals[1],floatvals[2]。这个解释帮助很大,谢谢,我确实需要一些关于数据处理的建议。我还有几个问题,在每一行中创建基准会覆盖元组,最终结果就是最后一行的元组。附加每一行以创建元组列表,或者以某种方式创建包含相对于每一行的数据的元组,这是一种好的做法吗?也许我可以附加到一个列表,然后从列表中创建一个元组,但这似乎不是一个好的做法。我添加了完整的parsa_lista函数。正如我之前所说,伊格纳西奥基本上有正确的答案;我只是更详细地解释一下。最终结果是一个元组列表似乎是完全可以接受的。然而,出于好奇,第一列只是行号吗?如果是这样,它可能会被安全地安装;可以通过索引访问列表。例如,converted[224]是转换列表中的第225个元素。是的,它是,但它也用于进行一些测试和输出,所以我选择保留它并输出所有正确的行号。这个列表也是从0开始的,所以我选择使用您的代码并对其进行一些修改,使第一列以数字表示其值,例如:>datum=intvals[0]+1,vals[1],floatvals[2]。工作非常出色,今天刚学到一些有用的东西。谢谢。工作很有魅力,今天刚学到一些有用的东西。谢谢
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