【问题标题】:Reading and printing from a plain text file Python 3从纯文本文件 Python 3 读取和打印
【发布时间】:2013-06-04 21:31:33
【问题描述】:

我有一个纯文本文件,我正在尝试使用该文本文件重新创建打印的“书面打印”功能。

文本文件当前有:

"""
Test1

Test1

Test1
""",
"""
Test2

Test2

Test2
""",
"""
Test3

Test4

Test5
"""

我的目标是将其读入 3 个字符串的列表中,让随机模块选择其中一个字符串并最终完全按照所写的方式打印它,但没有 """ 或 ,。我可以从如果需要的话,我只是在猜测如何让 print 准确地打印出所写的内容:

print("""
Test1

Test1

Test1
""")

(输出)

Test1

Test1

Test1

任何帮助将不胜感激。谢谢!

编辑:我试过了:

import random
file = open('prebaked', 'r')
print(random.choice(file))

import random
with open('prebaked', 'r') as f:
    file = f.read()
print(random.choice(file))

import random
with open('prebaked', 'r') as f:
    file = list(f.read())
print(random.choice(file))

【问题讨论】:

  • 到目前为止你尝试过什么?我们不是来为您编写代码的 - 我们是来帮助您解决特定问题的。
  • import random file = open('prebaked', 'r') print(random.choice(file)) and import random with open('prebaked', 'r') as f: file = f.read() print(random.choice(file)) 并使用 open('prebaked', 'r') 作为 f 导入 random: file = list(f.read()) print(random.choice(file))

标签: python python-3.x


【解决方案1】:

逻辑:

  • 读取文件。
  • 根据',' 将字符串分成一个列表,并从字符串中删除空格和"""
  • 随机调用以从列表中进行选择。

代码:

import random

with open('mytextfile.txt', 'r') as file_obj:
    str_list = [s.strip('\r\n\t "') for s in file_obj.read().split(',')]

print random.choice(str_list)

【讨论】:

  • strip('"""')strip('"') 相同,并删除任意数量的前导/尾随引号。
  • 谢谢,这个答案是我最容易得到的答案,我可以让它工作。谢谢!
  • 请注意,如果任何字符串包含字符,,此解决方案将无法正常工作。
  • @interjay 这也是正确的。这里有两个选项:首先使用split('"""\n,\n"""'),或者另一种方式是你的,literal_eval。但是在OP的问题中,该文件不包含',' elsewehere,而是作为字符串的分隔符。
【解决方案2】:

您的文件包含的几乎就是字符串列表的 Python 语法,只是缺少了 []。如果添加这些,您可以使用ast.literal_eval 安全地评估 Python 语法并为您提供字符串列表:

>>> from ast import literal_eval
>>> with open('myfile.txt', 'r') as f:
        file_contents = f.read()
>>> literal_eval('[' + file_contents + ']')
['\nTest1\n\nTest1\n\nTest1\n', '\nTest2\n\nTest2\n\nTest2\n', '\nTest3\n\nTest4\n\nTest5\n']

【讨论】:

  • 我从该代码中不明白 python 如何知道要读入 file_contents 的文件名或列表。
  • @Simkill:我假设您将文件内容读入字符串file_contents,例如file_contents = my_file.read().
  • 抱歉,我应该说我在文件 I/O 方面比较糊涂,因为我想在业余时间自学 Python。不过感谢您的帮助,我会记住该模块以备将来使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多