Python:如何根据给定文件夹的内容创建名称列表?

Posted

技术标签:

【中文标题】Python:如何根据给定文件夹的内容创建名称列表?【英文标题】:Python: how to create a list with names based on the content of a given folder? 【发布时间】:2016-02-11 12:06:01 【问题描述】:

我需要创建一个这样的列表: myindex=['event 1','event 2','event 3', ..., 'event n'],其中n 是我在给定目录中拥有的csv 文件的数量。

为了实现这一点,我写了以下内容:

directoryPath=raw_input('Directory for csv files: ')
myindex=[] #'event 1','event 2','event 3','event 4','event 5','event 6'
for i,file in enumerate(os.listdir(directoryPath)):
    if file.endswith(".csv"):
        myindex.append('event '+str(i))

我传递的目录有ncsv文件和njpg文件,但我只想考虑前者。

我得到的结果: myindex=['event 0','event 2', 'event 4', ..., 'event 2(n-1)'].

我想要的结果: myindex=['event 1', 'event 2', 'event 3', 'event 4', ..., 'event n']

我应该在我的块中修改什么?谢谢!

编辑

如果我想让myindex 的第一个元素为空string 怎么办?所以要有myindex=['','event 1','event 2',...,'event n']

【问题讨论】:

每次读取一个csv文件都需要创建一个计数器变量并增加。 【参考方案1】:

enumerate 采用第二个参数,即开头的数字。使用1。然后使用glob 只统计csv文件:

for i,v in enumerate(glob.glob('*.csv'),1):

【讨论】:

【参考方案2】:

使用genex过滤文件名。

enumerate((x for os.listdir(directoryPath) if x.endswith(".csv")), start=1)

或者让操作系统来做。

enumerate(glob.glob(os.path.join(directoryPath, "*.csv")), start=1)

【讨论】:

【参考方案3】:

您需要一个计数器而不是使用枚举,因为它会随着每个循环递增

directoryPath=raw_input('Directory for csv files: ')
myindex=[''] #'event 1','event 2','event 3','event 4','event 5','event 6'

count = 0
for file in os.listdir(directoryPath):
    if file.endswith(".csv"):
        count += 1
        myindex.append('event '+str(count))

【讨论】:

@FrancescoCastellani 只需将其添加到列表的初始化中即可。如果它基于一个条件,那么你可以使用myindex.insert(0,'')

以上是关于Python:如何根据给定文件夹的内容创建名称列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据特定的值进行聚合,并创建给定对象列表的嵌套地图?

如何根据sqlite数据库中的名称从drawable中获取图像,然后在列表视图中显示

powershell 这将遍历目录中的文件列表,解析文件的名称,并根据解析的名称创建新文件。氏

如何编写 python 单行代码来创建文件中所有单词的列表? [复制]

如何仅使用列表名称创建 selectInput? (不显示列表内容)闪亮

sybase中如何根据列名列出表?