Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python自动文件名_Python_File Io_Python 2.7 - Fatal编程技术网

Python自动文件名

Python自动文件名,python,file-io,python-2.7,Python,File Io,Python 2.7,我想自动使用xlwt保存电子表格时使用的文件名。假设python程序正在运行的文件夹中有一个名为Data的子目录。我希望程序计算该文件夹中的文件数(#=n)。那么文件名必须以(n+1)结尾。如果文件夹中有0个文件,则文件名必须为Trial\u 1.xls。此文件必须保存在该子目录中 我知道: import xlwt, os, os.path n = len([name for name in os.listdir('.') if os.path.isfile(name)]) 统计同一文件夹中的

我想自动使用
xlwt
保存电子表格时使用的文件名。假设python程序正在运行的文件夹中有一个名为
Data
的子目录。我希望程序计算该文件夹中的文件数(#=n)。那么文件名必须以(n+1)结尾。如果文件夹中有0个文件,则文件名必须为
Trial\u 1.xls
。此文件必须保存在该子目录中

我知道:

import xlwt, os, os.path
n = len([name for name in os.listdir('.') if os.path.isfile(name)])
统计同一文件夹中的文件数

a = n + 1
filename = "Trial_" + "a" + ".xls"
book.save(filename)
这会将中正确命名的文件保存到同一文件夹中

a = n + 1
filename = "Trial_" + "a" + ".xls"
book.save(filename)
我的问题是如何将其扩展到子目录?谢谢。

os.listdir('.')
此处的
指向执行文件的目录。更改
以指向您感兴趣的子目录

您应该从文件系统的根目录中为它指定完整的路径名;否则,它将相对于执行脚本的目录。这可能不是你想要的;特别是当您需要从另一个程序中引用子目录时

您还需要提供
filename
变量的完整路径;其中包括子目录

为了简化操作,只需设置变量的完整路径,并在需要时引用它

TARGET_DIR = '/home/me/projects/data/'
n = sum(1 for f in os.listdir(TARGET_DIR) if os.path.isfile(os.path.join(TARGET_DIR, f)))
new_name = "{}Trial_{}.xls".format(TARGET_DIR,n+1)
os.listdir('.')
此处的
指向执行文件的目录。更改
以指向您感兴趣的子目录

您应该从文件系统的根目录中为它指定完整的路径名;否则,它将相对于执行脚本的目录。这可能不是你想要的;特别是当您需要从另一个程序中引用子目录时

您还需要提供
filename
变量的完整路径;其中包括子目录

为了简化操作,只需设置变量的完整路径,并在需要时引用它

TARGET_DIR = '/home/me/projects/data/'
n = sum(1 for f in os.listdir(TARGET_DIR) if os.path.isfile(os.path.join(TARGET_DIR, f)))
new_name = "{}Trial_{}.xls".format(TARGET_DIR,n+1)

既然你说Burhan Khalid的答案“非常有效”,你应该接受它

我只是想指出另一种计算数字的方法。你这样做是可行的,但如果我们想象你在数沙粒或其他东西,会占用太多的内存。以下是获取计数的更直接的方法:

n = sum(1 for name in os.listdir('.') if os.path.isfile(name))
对于每个符合条件的名称,我们得到一个1,所有这些1都被输入到
sum()
中,然后你得到你的计数

请注意,此代码使用“生成器表达式”而不是列表。上面的代码不是构建一个列表,获取其长度,然后丢弃该列表,而是生成一个迭代器,
sum()
迭代以计算计数

这有点低级,但我们可以使用一个快捷方式:
sum()
将接受布尔值,并将
True
视为1,将
False
视为0。我们可以把这些加起来

# sum will treat Boolean True as a 1, False as a 0
n = sum(os.path.isfile(name) for name in os.listdir('.'))

这是非常棘手的,我可能不会使用它而不发表评论。但我相信这是用Python计算事物的最快、最有效的方法。

既然你说Burhan Khalid的答案“非常有效”,你应该接受它

我只是想指出另一种计算数字的方法。你这样做是可行的,但如果我们想象你在数沙粒或其他东西,会占用太多的内存。以下是获取计数的更直接的方法:

n = sum(1 for name in os.listdir('.') if os.path.isfile(name))
对于每个符合条件的名称,我们得到一个1,所有这些1都被输入到
sum()
中,然后你得到你的计数

请注意,此代码使用“生成器表达式”而不是列表。上面的代码不是构建一个列表,获取其长度,然后丢弃该列表,而是生成一个迭代器,
sum()
迭代以计算计数

这有点低级,但我们可以使用一个快捷方式:
sum()
将接受布尔值,并将
True
视为1,将
False
视为0。我们可以把这些加起来

# sum will treat Boolean True as a 1, False as a 0
n = sum(os.path.isfile(name) for name in os.listdir('.'))
这是非常棘手的,我可能不会使用它而不发表评论。但我相信这是Python中计算事物的最快、最有效的方法。

您实际上想要:

你实际上想要:


os.listdir
未给出完整路径。只有基本名称。是的,修正了,在没有理解的情况下做得更好。非常好!我使用TARGET_DIR='data/',因为它在同一个文件夹中(我想我在最初的问题中不清楚)。谢谢另外,我注意到您使用.format()创建文件名的方式效率更高。你是怎么用的?以前从未见过。请参阅
os上的文档。listdir
未给出完整路径。只有基本名称。是的,修正了,在没有理解的情况下做得更好。非常好!我使用TARGET_DIR='data/',因为它在同一个文件夹中(我想我在最初的问题中不清楚)。谢谢另外,我注意到您使用.format()创建文件名的方式效率更高。你是怎么用的?以前从未见过。请参阅有关感谢的文档。没有意识到有一个“接受”功能;我是这个网站的新手。完成:)@Jey你应该读这本书。谢谢。没有意识到有一个“接受”功能;我是这个网站的新手。完成:)@Jey您应该阅读。这比执行
os.listdir
更合适,因为glob会立即从扩展模式解析您的文件。然而,我建议使用
os.glob1(DIR,*.xls')
使结果列表更小(仅基名称),并使用
os.path.join
加入DIR和新基名称。这比使用
os.listdir
更合适,因为glob会立即从扩展模式解析文件。然而,我建议使用
os.glob1(DIR,'.*.xls')
使结果列表更小(仅基名称),并使用
os.path.join
加入t