【问题标题】:Python: how to create a list with names based on the content of a given folder?Python:如何根据给定文件夹的内容创建名称列表?
【发布时间】: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文件都需要创建一个计数器变量并增加。

标签: python list csv append listdir


【解决方案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,'')
      猜你喜欢
      • 1970-01-01
      • 2021-02-12
      • 2021-09-27
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多