8

文件名有数字 1-32 的东西,我想在循环中按顺序打开它们,例如:

i = 1
while i < 32:
filename = "C:\\Documents and Settings\\file[i].txt"
f = open(filename, 'r')
text = f.read()
f.close()

但这会查找文件“file[i].txt”而不是 file1.txt、file2.txt 等。如何使变量成为双引号内的变量?是的,我知道它没有缩进,请不要认为我那么愚蠢。

我认为这可能有效:构建文件名就像构建任何其他包含变量的字符串一样:

filename = "C:\\Documents and Settings\\file" + str( i ) + ".txt"

或者如果您需要更多选项来格式化数字:

filename = "C:\\Documents and Settings\\file%d.txt" % i
4

3 回答 3

5

首先,将循环更改为,while i <= 32否则您将排除名称中包含 32 的文件。您的第二个选项filename = "C:\\Documents and Settings\\file%d.txt" % i应该有效。

如果你的文件中的数字是 0 填充的,比如 'file01.txt'、'file02.txt',你可以使用%.2d而不是普通的旧 %d

于 2013-08-17T21:10:36.270 回答
5

您已经提供了答案。顺便说一句,使用with上下文管理器而不是手动调用close()

i = 1
while i < 32:
    filename = "C:\\Documents and Settings\\file%d.txt" % i
    with open(filename, 'r') as f:
        print(f.read())
于 2013-08-17T21:01:52.190 回答
2

是的,您提供的选项会起作用,为什么不直接测试一下呢?

filename = "C:\\Documents and Settings\\file" + str( i ) + ".txt"

或者

filename = "C:\\Documents and Settings\\file%d.txt" % i
于 2013-08-17T21:02:21.140 回答