读取文本文件以获取<levelnumber><tag><argument>中的输出

2024-04-19 13:38:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从文本文件中读取数据。文件中的数据具有结构

<level number> <tag> <argument>
 0 @I5@ INDI
 1 NAME Rosy /Huleknberg/
 2 GIVN Rosy
 2 SURN Huleknberg
 2 _MARNM Vettle
 1 SEX F
 1 BIRT
 2 DATE 15 SEP 1928
 1 DEAT Y
 2 DATE 10 MAR 2010
 1 FAMS @F3@
 0 @I6@ INDI
 1 NAME Roger /Rsoberg/
 2 GIVN Roger
 2 SURN Rsoberg
 2 _MARNM Rsoberg
 1 SEX M
 1 BIRT
 2 DATE 23 JAN 1928
 1 FAMS @F2@

我想读取这些数据并将各自的值存储在3个变量“levelnumber”、“tag”和“argument”中

我写了下面的代码来做这个操作

              testfile = open ('test.dat')
               for line in gedcom_file:
              lines = line.strip() 

              a = lines[:1]
              data.append(a)
              b = lines [1]
              data.append(b)
              c =lines [2:] 
              data.append(c) 

并得到以下输出(显示几行输出)

             0

             @I5@ INDI
             1

             NAME Rosy /Huleknberg/
             2

             GIVN Rosy
             2

             SURN Huleknberg
             2

             _MARNM Vettle
             1

             SEX F
             1

我的输出是

             <levelnumber>
             <tag> <argument>

我希望他们都在同一条线上

             <levelnumber> <tag> <argument>

如何更正代码?有没有其他更好的方法来完成这个任务?你知道吗


Tags: namedatadatetagargumentlinesindisex
2条回答

第一部分。解析文件

这部分代码没有按您的预期执行:

lines = line.strip() 
a = lines[:1]
b = lines[1]
c = lines[2:]

lines是一个字符串。所以lines[:1]是字符串的第一个字符,lines[1]是字符串的第二个字符,lines[2:]是字符串的其余部分。你知道吗

相反,在剥离字符串之后,您希望使用^{}将其拆分为单词。第二个参数告诉它只在前两个空格处拆分,这样结果列表的第三个元素就可以包含空格:

lines = line.strip().split(' ', 2)
a = lines[0]
b = lines[1]
c = lines[2]

或者更简洁地说:

a, b, c = line.strip().split(' ', 2)

第二部分。打印列表

一旦处理完毕并有了要打印的列表,就可以使用^{}将其组合成一个空格分隔的字符串。例如:

my_list = ['a', 'b', 'c']
print(' '.join(my_list))
# a b c

问题描述不清楚,但我希望这会有所帮助:

应该使用line.split()方法而不是line.strip()

testfile = open('test.dat')
for line in gedcom_file:
    # I suppose that data is a list
    data += line.split()

记住print('string')将在输出的末尾添加换行符。print('string', end='')输出没有换行符。你知道吗

相关问题 更多 >