我想保存一个文件(不要介意类型)一些关于条目和对象的字符串信息。我可以从我的数据生成字符串,我知道如何在.txt文件中保存字符串。但是,当我从文件中读取时,我正在阅读" line",所以我假设它读取一行直到第一个新的行符号。但是,我的一些字符串比文档行长,当我想读它时,我会收到错误。如何在文件中保存长字符串以避免丢失任何数据?
是的,我如何保存在文件中:
with codecs.open(filename, 'a', "utf-8") as outfile:
outfile.write(data_string + '\n')
以及我如何从文件中读取数据:
with codecs.open(filename, 'r',"utf-8") as infile:
lines = infile.readlines()
答案 0 :(得分:1)
您有几个选择:
import tempfile
import json
text = 'this is my string with a \nnewline in it'
with tempfile.TemporaryFile(mode='w+') as f:
f.write(json.dumps([text]))
f.flush()
f.seek(0)
lines = json.load(f)
print(lines)
缺点:JSON可能具有相当人性化的可读性,但是文件中的一点错误会使一切都变得烦人。不像普通人那么清晰。文本。
import tempfile
import pickle
text = 'this is my string with a \nnewline in it'
with tempfile.TemporaryFile(mode='w+') as f:
f.write(pickle.dumps([text]))
f.flush()
f.seek(0)
lines = pickle.load(f)
print(lines)
缺点:泡菜是terribly insecure,您应该像对待eval
一样对待它。如果您在这种情况下使用eval
感到不舒服,那么您就不应该使用泡菜。
import tempfile
text = 'this is my string with a \nnewline in it'
other_text = 'this line has no newline in it'
with tempfile.TemporaryFile(mode='w+') as f:
f.write(text)
f.write(chr(30))
f.write(other_text)
f.flush()
f.seek(0)
lines = f.read().split(chr(30))
print(lines)
下行:可能有点棘手。你必须确保你的哨兵在文本本身中找不到。你也不能使用readlines
,逐行迭代会更加尴尬。