一种在python 3.3.2中保存.TXT文件中打印内容的方法

时间:2014-03-16 12:10:19

标签: python save python-3.3

我已经制作了代码,可以随机为游戏中的角色生成随机强度和技能值,代码如下;

import random
input('Character name 1 ')

print ('Stamina of Character 1  =', (((random.randrange(1,12)//(((random.randrange(1,4)))))))+10)
print ('Strength of Character 1 =', (((random.randrange(1,12)//(((random.randrange(1,4)))))))+10)
input('Character name 2 ')

print ('Stamina of Character 2 =', (((random.randrange(1,12)//(((random.randrange(1,4)))))))+10)
print ('Strength Character 2 =', (((random.randrange(1,12)//(((random.randrange(1,4)))))))+10)

代码有效但我需要能够将程序的结果保存到.txt文件中,该文件可由玩家打开以查看,并且在输入的字符名称下保存力量和技能。那么无论如何要保存程序打印到文本文件的内容还是我必须做其他事情?感谢所有帮助。

3 个答案:

答案 0 :(得分:1)

您可以非常轻松地将文本写入文件。看看http://docs.python.org/3.3/tutorial/inputoutput.html#reading-and-writing-files

您可以像这样写入文本文件,而不是打印到标准输出:

with open('characters.txt', 'w') as f:
    name1 = input('Character name 1:')
    f.write("Character name 1: " + name1)
    stamina = random.randrange(1,12) // (random.randrange(1,4) + 10)
    # stamina is a integer, but we need to write it as a string
    f.write("Stamina of Character 1 = " + str(stamina))

    name2 = input('Character name 2:')
    # etc ...

但是,此代码有许多可能的改进。我会尝试解释其中一些。

如果您为每个字符保存相同的信息,则无需多次编写代码。考虑使用一个函数:

def save_character_stats(f, n=1):
    name = input("Character name {0}: ")
    stamina = random.randrange(1,12) // (random.randrange(1,4) + 10)
    strength = random.randrange(1,12) // (random.randrange(1,4) + 10)
    f.write("Character name {0}: {1}".format(n, name))
    f.write("Stamina: {0}".format(stamina))
    f.write("Strength: {0}".format(strength))
    f.write("\n")


with open('characters.txt', 'w') as f:
    for i in range(2):
        save_character_stats(f, i)

在计算值时,您实际上并不需要写入文件。如果你有一个提供它们的函数,而另一个函数写入文件,通常会更清楚:

def new_character_stats():

    def random_value():
        return random.randrange(1,12) // (random.randrange(1,4) + 10)

    return {
        'stamina': random_value()
        'strength': random_value()
    }

def save_character_stats(characters=3):
    with open('characters.txt', 'w') as f:
        for i in range(characters):
            name = input("Character name {0}: ".format(i))
            stats = new_character_stats()
            f.write("Character name {0}: {1}".format(n, name))
            f.write("Stamina: {0}".format(stats['stamina']))
            f.write("Strength: {0}".format(stats['strength']))
            f.write("\n")

请注意,为了让代码只提供一次,我们使用了额外的功能。

您可以考虑的其他改进是

  • 使用简单模板编写内容。在文档中查找字符串格式。
  • 为随机公式使用有意义的变量名称(通常不会让魔术数字浮动!)
  • 将信息保存为更加机器可读的格式。在文档中查找json模块。
祝你好运!

答案 1 :(得分:0)

我会使用csv.DictWriter创建一个csv文件,其中包含相应列名的标题行。这就是'姓名',' Stamina','力量'。或者,如果要准确保存打印的内容,请创建一个长字符串。并打开,写,关闭。我现在必须跑,但稍后会扩展

您应该创建变量并将其用于打印和写入。您可以使用循环来确定名称和其他特征。请注意,我没有使用with open formula以允许设置函数并允许在结束前进行其他处理和写入。如果要在最后自动关闭文件,请使用

with open('file.txt', 'ab') as f:

方法。这将在您退出示波器后立即关闭文件(如缩进所示)

import random

f = open('file.txt', 'ab')
name = input('Character name: ')
while name != 'done':
    stamina = (((random.randrange(1,12)//(((random.randrange(1,4)))))))+10)
    strength = (((random.randrange(1,12)//(((random.randrange(1,4)))))))+10)
    outline = 'name = ' + name + 'stamina = ' + stamina + 'strength = ' + strength
    print outline
    f.write(outline+'\n')
    name = input('Character name: ')
f.close()

' ab'将创建该文件(如果该文件尚不存在)或附加到现有文件。

对于csv文件,您将使用

import random

import csv
ofile = open('file.txt', 'ab')
outfields = ['Name', Stamina', Strength]
outfile = csv.DictWriter(ofile, fieldnames=outfields)
outfile.writerow(dict((fn, fn) for fn in outfields))
name = input('Character name: ')
row = {}
while name != 'done':
    row['Name'] = name
    stamina = (((random.randrange(1,12)//(((random.randrange(1,4)))))))+10)
    strength = (((random.randrange(1,12)//(((random.randrange(1,4)))))))+10)
    row['Strength] = strength
    row['Stamina'] = stamina
    print row
    outfile.writerow(row)
    name = input('Character name: ')
ofile.close()

当然,您必须创建一个python程序来读取csv文件并对其进行处理,而不是让用户只需使用csv.DictReader在编辑器中调出文本文件。但是,这可能是游戏的一部分。

答案 2 :(得分:0)

发布的答案都要求您手动打开文件并选择在打印到所需文件的同时写入文件。如果您只想同时将文件打印到文件和标准输出,请使用Python的logging模块。

import logging
import sys

logging.basicConfig(filename='logfile.txt', filemode='w', level=logging.DEBUG,
        format='%(message)s')

logger = logging.getLogger()
stdout = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(stdout)

logger.info('This is a logged message. It will appear at both the screen'
        + ' and in the logfile.')

然后当你运行它时,在控制台你会看到:

$ python3 logger.py
This is a logged message. It will appear at both the screen and in the logfile.

输出打印到屏幕上,但也会显示在日志文件中:

$ cat logfile.txt 
This is a logged message. It will appear at both the screen and in the logfile.

记录器允许您做更多的事情,但它们也适用于基础知识。如果您需要更多帮助,请参阅basic logging tutorial