为什么字符串没有写入临时文件?
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 一旦关闭就不要删除它。然后再打开阅读。
在那种情况下,使用简单的文本写入和读取模式是可行的。
我有一个脚本,我在其中创建了一个临时文件并尝试在其中写入一个字符串,然后尝试在其中 运行 一个 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 一旦关闭就不要删除它。然后再打开阅读。
在那种情况下,使用简单的文本写入和读取模式是可行的。