【问题标题】:Fetching data from a text file in python using re module使用re模块从python中的文本文件中获取数据
【发布时间】:2021-10-19 20:26:49
【问题描述】:

我有一个名为 file.txt 的文本文件 如下所示:

0,  1,  2.     |classes
A0: 1, 2, 3
A1: 1, 2, 3
A2: 1, 2, 3
A3: 1, 2, 3, 4
| Final Pseudo Deletion Count is 0.  Optimisaiton not possible.

我只想从这个文件中取出属性名称:A0、A1、A2、A3。我该怎么做?

我的意思是对于这个特定文件,它只是A0,A1,A2,A3,但我想要一般文件的输出。可以有A0,A1.....An。如下:

0,  1,  2.     |classes
A0: 1, 2, 3
A1: 1, 2, 3
A2: 1, 2, 3
A3: 1, 2, 3, 4
A4: 1, 2, 3
A5: 1, 2, 3, 4
| Final Pseudo Deletion Count is 0.  Optimisaiton not possible.

所以在这种情况下,输出将包含A0, A1, A2, A3, A4, A5

我试过这样:

f = open('filename1.txt')
attrib1 = f.readline()
    
attrib = []
for i in range(1, len(attrib1)-1):
    v_pos_colon = attrib1[i].find(':')
    attrib.append(attrib[i][0:v_pos_colon])
print(attrib)

【问题讨论】:

  • 不需要正则表达式。只需检查该行是否包含:。如果是,则拆分该行并输出line[0]
  • StackOverflow 不是免费的编码服务。你应该try to solve the problem first。请更新您的问题以在minimal reproducible example 中显示您已经尝试过的内容。如需更多信息,请参阅How to Ask,并拨打tour :)
  • 是的,我已经编辑了我的问题。
  • f.readline() 只返回一行。你的意思是使用f.readlines()
  • 是的,应该是 f.readlines()

标签: python python-3.x python-re


【解决方案1】:

您是在循环文件第一行中的字符,而不是循环文件的行。

find() 在找不到字符串时返回-1。因此,当行中没有 : 时,您将添加切片 attrib[i][0:-1],它将所有内容切片到倒数第二个字符。您应该首先测试是否找到了该字符。

attrib = []
with open('filename1.txt') as f:
    for line in f:
        if ':' in line:
            attrib.append(line.split(':')[0])
print(attrib)

【讨论】:

  • 它给了我 : print(attrib) ^ SyntaxError: invalid syntax
  • 抱歉,我遗漏了)
猜你喜欢
  • 2011-10-01
  • 1970-01-01
  • 2013-08-22
  • 2023-03-19
  • 1970-01-01
  • 2018-07-01
  • 2017-09-24
  • 2013-03-13
  • 1970-01-01
相关资源
最近更新 更多