为什么字符串没有写入临时文件?

Why is string not being written into tempfile?

我有一个脚本,我在其中创建了一个临时文件并尝试在其中写入一个字符串,然后尝试在其中 运行 一个 for 循环(当“with”方法处于“活动”状态时)。

在 for 循环中,我尝试根据预定义的模式附加特定的行,但是当我在附加行后打印列表时,不仅 lsist 是空的,而且 division_text 字符串未在开头的临时文件中注册。

我基本上是将字符串写入临时文件并同时读取它。也许这就是问题所在。

最后打印的 3 张(每个列表一张)结果是空的。

为什么字符串没有打印到临时文件中?

import tempfile    

division_text = 'Hello, world.'
my_list = []

keywords = ['Hello']
pattern = re.compile('|'.join(keywords))

# create temporary .txt file to store string output from web scrape (division_text)
with tempfile.NamedTemporaryFile() as tmp:
    print(tmp.name)
    tmp.write(bytes(division_text, encoding='utf8')) # division_text is a string variable with many lines of text

    for line in tmp:
        print(line)    
        if re.search(pattern, line):
            my_list.append(line)

print(len(token_amount)) # []

如果我改用 tmp.writelines(),则会出现以下错误:

TypeError: a bytes-like object is required, not 'int'

如果我改用 NamedTemporaryFile(mode='w') 并使用 tmp.write(division_text),它会给我以下错误:io.UnsupportedOperation: not readable.

我在尝试时遇到同样的错误:

with tempfile.NamedTemporaryFile(mode = 'r+') as tmp:
    print(tmp.name)
    tmp.write(division_text)
    tmp.seek(0)
    tmp.read()

这里有一个解决方法,以防 r+ 模式导致问题(这里没有问题,但它可能取决于系统)

import tempfile,os
division_text = "12.0"
# create a temporary file, don't delete it when done
tmp_file = tempfile.NamedTemporaryFile(mode = 'w',delete=False)
with tmp_file as tmp:
    print(tmp.name)
    tmp.write(division_text)
# reopen the file for reading
with open(tmp_file.name) as tmp:
    new_division_text=tmp.read()
# remove the file manually
os.remove(tmp_file.name)
# print result
print(new_division)

想法是创建临时文件,但告诉 python 一旦关闭就不要删除它。然后再打开阅读。

在那种情况下,使用简单的文本写入和读取模式是可行的。