【问题标题】:How to dump pickle file into new lines?如何将泡菜文件转储到新行中?
【发布时间】:2019-04-15 00:45:35
【问题描述】:

这是我的代码:

f = open("cities.txt", 'wb')
pickle.dump(city_list, f)
f.close()

我通常知道将列表垂直打印到新行中,您可以在 print 语句中执行此操作:print(*city_list, sep='\n')。我想知道在创建泡菜文件时是否有办法做到这一点,这样当你打开它时,你会看到一个垂直列表,而不必做任何其他事情。例如,当我打开文件时:

fh = open("cities.txt", 'rb')
x = pickle.load(fh)
print(x)

我希望输出是一个垂直列表,而不必在打印语句中添加 sep='\n'。

【问题讨论】:

    标签: python pickle


    【解决方案1】:

    加载腌制数据后,它已经转换为常规 Python 列表。那么您要问的是:如何打印列表中的项目,每行一个项目?

    答案就是这样做:

    for item in x:
        print(item)
    

    如果您希望输出文件更容易被人类阅读,您应该以 Python 酸洗模块提供的格式以外的格式对数据进行编码。

    使用 CSV:

    import csv
    
    city_list = [
        ('Montreal', 'Canada'),
        ('Belmopan', 'Belize'),
        ('Monaco', 'Monaco'),
    ]
    
    with open('cities.txt', 'w') as file:
        writer = csv.writer(file)
    
        for city, country in city_list:
            writer.writerow(city, country)
    

    这将导致 city.txt 包含以下内容:

    加拿大蒙特利尔

    贝尔莫潘,伯利兹

    摩纳哥,摩纳哥

    【讨论】:

    • 请注意,您可以通过多种方式实现此目的。有些更适合处理大量数据。这是最简单、最“pythonic”的方式。
    • 感谢您的快速回复,但我更想寻找一种在打开文件时显示垂直列表而无需执行任何其他操作的方法。就像我在转储文件时可能需要做一些事情以使其在打开时垂直打印。
    • 很遗憾,pickle 格式不是人类可读的。如果你眯着眼睛,你可以从原始数据中辨认出单词和字符串,但如果你想让你的数据可读,你将不得不使用允许某些格式的通用格式,如 JSON、YAML 或 XML,或者你会必须设计自己的格式。您是否考虑过使用 CSV?
    • 我想我会尝试使用 JSON。谢谢!
    • JSON 可能不会在数组元素之间输出新行。您将需要一个足够复杂的 JSON 编写器来进行“漂亮的打印”。
    猜你喜欢
    • 1970-01-01
    • 2021-12-16
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多