Python-使用变量作为文件名创建文本文件

3

我正在进行一个项目,我的程序会创建一个名为“Ten Green Bottles”的文本文件,并在其中写入10个绿色瓶子的歌词。我已经成功地让它工作了,但我想让它变得更好。 我开始尝试让瓶子数量对用户可选,并且它也运行良好。 现在,我只想让文件名与用户输入的瓶子数量相关。 例如,如果我输入20个瓶子,我希望文本文件的名称为“Twenty Green Bottles”,而不是“Ten Green Bottles”

代码:

num1=int(input('Pick a number between 10 and 30: '))

def main():
    numbers =[ 'no', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven',      'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen',     'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen', 'Twenty', 'Twentyone',      'Twentytwo', 'Twentythree', 'Twentyfour', 'Twentyfive', 'Twentysix',         'Twentyseven', 'Twentyeight', 'Twentynine', 'Thirty' ]
text_one = 'green bottle%s\nHanging on the wall'
text_two = "\nAnd if one green bottle\nShould accidentally fall\nThere'll be"
text_three =' \n'


with open( 'Green Bottles.txt', 'w') as a:
    for l in range(num1, 0, -1):
        a.write(numbers[l]+ ' ')
        if l == 1:
            a.write(text_one % '' +'\n')
        else:
            a.write(text_one % 's' +'\n')

        a.write(numbers[l] + ' ')
        if l == 1:
            a.write(text_one %  '' + '\n') 
        else:
            a.write(text_one % 's' +  '\n')
        a.write(text_two + ' ')
        a.write(numbers[l-1] + ' ')
        if (l - 1) ==1 :
            a.write(text_one % ''+'\n')
        else:
            a.write(text_one % 's'+'\n')
        a.write('\n' + '\n')



if __name__ == '__main__':
main()

请注意:我的代码中第5、6、7行已经正确缩进。 - Phayer
3个回答

4
替换这行代码:
with open( 'Green Bottles.txt', 'w') as a:

随着

with open(numbers[num1] + ' Green Bottles.txt', 'w') as a:

这将在文件名前添加相应的单词。

2
你可以将文件名传递给一个函数并返回该文件。
def write(nameOfFile):
    print('Creating new text file') 

    name = nameOfFile+'.txt'  # Name of text file coerced with +.txt

    try:
        file = open(name,'r+')   # Trying to create a new file or open one
        return file

    except:
        print('Something went wrong! Can\'t tell what?')
        sys.exit(0) # quit Python

a = write(numbers[num1] )

关于您对我帖子的建议编辑,只是提醒一下:numbers 列表中的索引 1 表示的是 "One" 而不是 "Zero",因此不需要使用 -1 - Loocid
1
是的,抱歉没有注意到。 - Uma Kanth

1
您可以使用字符串格式将输入添加到文件名中。
使用:
with open('%s Green Bottles.txt' % numbers[num1], 'w') as a:

你的 %d 应该改成 %s :) - Loocid
1
@Loocid 谢谢您的更正:)由于输入是整数,所以这在我的脑海中。;) - Nilesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接