在python中读取文件时如何将字符串作为整数读取

在python中读取文件时如何将字符串作为整数读取,python,Python,我在文本文件的特定部分读取了以下代码行。问题是这些数字不是字符串,所以我想将它们转换为整数,并将它们读入某种类型的列表中 文本文件中的数据示例如下所示: 然而,这并不完全具有代表性,我在这里上传了完整的数据集:作为文本文件 *NSET,NSET=节点\u向后推\u IB 99915527、99915529、99915530、99915532、99915533、99915548、99915549、99915550、, 99915551, 99915552, 99915553, 9991555

我在文本文件的特定部分读取了以下代码行。问题是这些数字不是字符串,所以我想将它们转换为整数,并将它们读入某种类型的列表中

文本文件中的数据示例如下所示:

然而,这并不完全具有代表性,我在这里上传了完整的数据集:作为文本文件

*NSET,NSET=节点\u向后推\u IB

99915527、99915529、99915530、99915532、99915533、99915548、99915549、99915550、,
99915551,  99915552,  99915553,  99915554,  99915555,  99915556,  99915557,  99915558,
99915562,  99915563,  99915564,  99915656,  99915657,  99915658,  99915659,  99915660,
99915661,  99915662,  99915663,  99915664,  99915665,  99915666,  99915667,  99915668,
99915669,  99915670,  99915885,  99915886,  99915887,  99915888,  99915889,  99915890,
99915891,  99915892,  99915893,  99915894,  99915895,  99915896,  99915897,  99915898,
99915899,  99915900,  99916042,  99916043,  99916044,  99916045,  99916046,  99916047,
99916048、99916049、99916050

*NSET,NSET=节点\u向后推\u OB

任何帮助都将不胜感激

嗨,我仍然被这个问题困扰着还有什么建议吗?最新代码和错误消息如下,谢谢

 import tkinter as tk
 from tkinter import filedialog
 file_path = filedialog.askopenfilename()
 print(file_path)
 data =  []
 data2 = []
 data3 = []
 flag= False
 with open(file_path,'r') as f:
     for line in f:
         if line.strip().startswith('*NSET, NSET=Nodes_Pushed_Back_IB'):
             flag= True
         elif line.strip().endswith('*NSET, NSET=Nodes_Pushed_Back_OB'):
             flag= False    #loop stops when condition is false i.e if false do nothing
         elif flag:          # as long as flag is true append
             data.append([int(x) for x in line.strip().split(',')]) 

 result is the following error:

 ValueError: invalid literal for int() with base 10: ''

我希望每个字符串都是列表中的一个数字,而不是作为字符串来读取,即
[98932850 98932852 98932853 98932855 98932856 98932871 98932872 98932873]

在这种情况下,我将正则表达式与字符串方法一起使用。我会这样解决这个问题:

import re 
with open(filepath) as f:
    txt = f.read()

g = re.search(r'NSET=Nodes_Pushed_Back_IB(.*)', txt, re.S)
snums = g.group(1).replace(',', ' ').split()
numbers = [int(num) for num in snums]
我将全文读入
txt
。 接下来,我使用一个正则表达式,并使用文本中标题的最后一部分作为锚定符,用捕获括号捕获其余部分(re.S标志意味着点也应该捕获换行符)。我通过
g.group(1)
将所有数字作为一个文本单元访问

下一个。我删除了所有的逗号(实际上用空格替换),因为在生成的文本上我使用了
split()
,这是一个很好的函数,可以用于用空格分隔的文本项上——不管空格的数量有多大,它只是按照您的意图将其拆分


其余的只是使用列表理解将文本转换为数字。

您的行包含多个数字和一些分隔字符。您可以通过明智地应用
split
strip
来解析该格式,或者通过让
re
专门提取您关心的字段来最小化字符串处理:

ints = list(map(int, re.findall(r'-?\d+', line)))

此正则表达式将查找每组数字(可选地以减号作为前缀),然后
map
int
应用于找到的每组数字

使用字符串样本:

strings = '  98932850,  98932852,  98932853,  98932855,  98932856,  98932871,  98932872,  98932873,\n'
我只是拆分字符串,去掉逗号,然后返回一个数字列表:

numbers = [ int(s.strip(',')) for s in strings.split() ]
基于您的评论并考虑代码的更大上下文。我有几点建议:

from itertools import groupby
number_groups = []
with open('data.txt', 'r') as f:
    for k, g in groupby(f, key=lambda x: x.startswith('*NSET')):
        if k:
            pass
        else:
            number_groups += list(filter('\n'.__ne__, list(g)))  #remove newlines in list

data = []
for group in number_groups:
    for str_num in group.strip('\n').split(','):
        data.append(int(str_num))

在您的代码中,是否有以“*NSET,NSET=Nodes\u push\u Back\u IB”开头的行?我们需要看到这条线的完美表现。然后你需要拆分有效行。是的,我在上面的原始问题中编辑了示例数据,包括“*NSET,NSET=Nodes\u push\u Back\u IB”的位置。数据集相当大,因此未包含所有数据,但上述数据具有代表性。然后我应该有:data.append(strip().split(“,”)?然后如何将值转换为int。谢谢。您好,我在现有代码行的末尾尝试了此操作,但出现以下错误:AttributeError:“list”对象没有属性“split”。如果您有字符串列表,则更简单:只需删除split()函数。感谢您的帮助,我希望将当前的代码与您的第一个建议相结合。我已经在我的原始问题中编辑了代码。我不明白为什么这不起作用。@Jay我猜你有一个字符串列表。而且,您正在尝试拆分列表而不是字符串。在我的示例中,我加入了两个变量,
group
str_num
,以突出这个问题。您好,谢谢。但是,即使使用您建议的第二个代码,我仍然无法实现这一点。我已经上传了完整的数据集作为一个文本文件在原来的职位,因为我意识到格式略有不同。我试图将
data.append(line.strip())
替换为
data.append([int(x)代表行中的x.replace(“,”).split(“,”)])
。然而,这仍然不起作用。split函数似乎可以解决这个问题,但是它仍然抛出了一个关于
ValueError:invalid literal for int()的错误,以10为基数:'\n'
,因此我似乎无法删除空格。我认为这是在我拆分时出现的。您好,在尝试此操作时,我遇到了以下错误:ValueError:invalid literal for int(),以10为基数:“*NSET”请确保复制程序的原样。正则表达式去掉了头。