Python:保存文件大条目

时间:2016-07-17 19:47:58

标签: python python-2.7

我想保存一个文件(不要介意类型)一些关于条目和对象的字符串信息。我可以从我的数据生成字符串,我知道如何在.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()

1 个答案:

答案 0 :(得分:1)

您有几个选择:

转储/加载为JSON

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感到不舒服,那么您就不应该使用泡菜。

您自己的sentinel

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,逐行迭代会更加尴尬。