簡體   English   中英

在 Python3 中不使用 writelines() 將多行寫入文件

[英]Write multiple lines to file without using writelines() in Python3

我正在嘗試使用 python 在文件中寫入多行,但不使用writelines()

現在我打算這樣做:

header = ('-' * 42 +
      '\nCREATION DATE: {}\n' +
      'HOSTANME: {}\n' +
      'PYTHON VERSION: {}\n' +
      'SYSTEM: {}\n' +
      'SYSTEM VERSION: {}\n' +
      'SYSTEM RELEASE: {}\n' +
      'MACHINE: {}\n' +
      'PROCESSOR: {}\n' +
      '-' * 42)

file.write(header)

但我不知道這是否是最好的方法。

提前致謝。

也許使用字典:

stuff = {
    "CreationDate": "some_date",
    "HostName": "some_host_name",
    "PythonVersion": "some_version",
    # ...
    'Processor': "some_processor"
}

然后您的數據以一種漂亮的、有組織的方式存儲。 之后,您只需要編寫某種函數來將字典轉換為類似於您想要的輸出的字符串。 像這樣的東西:

header = str()

for key, value in stuff.items():
    header += f'{key}: {value}\n' # use str.format() if don't have f-string support

file.write(f'{'-'*42}\n{header}{'-'*42}')

希望這有幫助! :)

在這種情況下,我通常會使用'\\n'.join() 您可以將任何可迭代的字符串傳遞給'\\n'.join() - 這當然包括列表理解和生成器理解之類的東西。

例如,使用 Andrew Grass 的答案中的 dict,我們可以使他的示例更加緊​​湊,如果這是您的喜好:

header = '\n'.join((f'{key}: {value}' for key, value in stuff.items()))
file.write('\n'.join(('-' * 42, header, '-' * 42)))

當然,你可以更進一步,把它放在一行上,但在我看來,這太不可讀了。

這是一個與 Python 3.5 及更低版本兼容的類似解決方案(在 Python 3.6 中引入了 f 字符串)。 這更緊湊,但可能更難閱讀:

header = '\n'.join(map("{0[0]}: {0[1]}".format, stuff.items()))
file.write('\n'.join(('-' * 42, header, '-' * 42)))

您可以使用itertools.starmap使最后一個示例更漂亮一點:

from itertools import starmap

header = '\n'.join(starmap("{}: {}".format, stuff.items()))
file.write('\n'.join(('-' * 42, header, '-' * 42)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM