gpt4 book ai didi

带有 Flag 的 Python 流量控制?

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:52 24 4
gpt4 key购买 nike

以这种形式匹配一个文件。它始终以 InvNo 开头,~EOR~ 是记录结束。

InvNo: 123
Tag1: rat cake
Media: d234
Tag2: rat pudding
~EOR~
InvNo: 5433
Tag1: strawberry tart
Tag5: 's got some rat in it
~EOR~
InvNo: 345
Tag2: 5
Media: d234
Tag5: rather a lot really
~EOR~

应该变成

IN 123
UR blabla
**
IN 345
UR blibli
**

其中 UR 是一个 URL。我想将 InvNo 保留为第一个标签。 ** 现在是记录标记的结尾。这有效:

impfile = filename[:4]
media = open(filename + '_earmark.dat', 'w')

with open(impfile, 'r') as f:
HASMEDIA = False
recordbuf = ''

for line in f:
if 'InvNo: ' in line:
InvNo = line[line.find('InvNo: ')+7:len(line)]
recordbuf = 'IN {}'.format(InvNo)

if 'Media: ' in line:
HASMEDIA = True
mediaref = line[7:len(line)-1]

URL = getURL(mediaref) # there's more to it, but that's not important now
recordbuf += 'UR {}\n'.format(URL))

if '~EOR~' in line:
if HASMEDIA:
recordbuf += '**\n'
media.write(recordbuf)
HASMEDIA = False

recordbuf = ''

media.close()

是否有更好、更 Pythonic 的方式?使用 recordbuffer 和 HASMEDIA 标志似乎是老生常谈了。有什么好的或更好的做法的例子或技巧吗?

(此外,我愿意接受关于这篇文章更切题的标题的建议)

最佳答案

你可以设置InvNoURL最初到None , 并且只在 InvNo 时打印一条记录和 URL都不是 Falsish:

impfile = filename[:4]
with open(filename + '_earmark.dat', 'w') as media, open(impfile, 'r') as f:
InvNo = URL = None
for line in f:
if line.startswith('InvNo: '):
InvNo = line[line.find('InvNo: ')+7:len(line)]

if line.startswith('Media: '):
mediaref = line[7:len(line)-1]
URL = getURL(mediaref)

if line.startswith('~EOR~'):
if InvNo and URL:
recordbuf = 'IN {}\nUR {}\n**\n'.format(InvNo, URL)
media.write(recordbuf)
InvNo = URL = None

注意:我改了'InvNo: ' in lineline.startswith('InvNo: ')基于假设 InvNo总是出现在行的开头。在您的示例中似乎是正确的,但您使用 line.find('InvNo: ') 的事实建议 'InvNo:'可能出现在行中的任何地方。

如果InvNo:只出现在行首,然后使用 line.startswith(...)并删除 line.find('InvNo: ') (因为它等于 0)。

否则,您将不得不保留 'InvNo:' in lineline.find (当然, Media~EOR~ 也是如此)。使用像 'Media' in line 这样的代码的问题是如果 Tags可以包含任何内容,它可能包含字符串 'Media'而不是真正的字段标题。

关于带有 Flag 的 Python 流量控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19798597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com