我正在使用python 3.7.4。我要排序的数据是在一系列具有'1234_5678.A.CSV','1234_5678.b.csv','1234_5678.c.csv','1234_5678.c.csv','1234_5678.d.5678.d.csv','1234_5678.B.CSV','1234_5678.A.CSV','1234_5678.A.CSV'中等。
代码如下:
import sys
## GET ALL CSV Files in a folder
import os
import glob
def filter_name(filterString, fileNames):
filtered = []
for name in fileNames:
if filterString in name:
filtered.append(name)
return filtered
def sort_key(fileName):
"""Assumes file name of 12345_9876.A.csv structure
returns 9876 value"""
_, backhalf = fileName.split("_")
return backhalf.split(".")[0]
file_path=r'C:\Auto\201907 compare\AEG data\#1022206 abcdef879 S1 - doneagain\orig - Copy\'
path = file_path
extension = 'csv'
#os.chdir(path) # TODO This might be causing more problems than just the image packing thing...
listOfFiles = [i for i in glob.glob(os.path.join(path, '*.{}').format(extension))]
listOfFiles = ['C:\Auto\201907 compare\AEG data\#1022206 abcdef879 S1 - doneagain\orig - Copy\20190531_155638064567.A.csv',
'C:\Auto\201907 compare\AEG data\#1022206 abcdef879 S1 - doneagain\orig - Copy\20170532_155646505788.B.csv',
'C:\Auto\201907 compare\AEG data\#1022206 abcdef879 S1 - doneagain\orig - Copy\20170532_155654944787.C.csv',
'C:\Auto\201907 compare\AEG data\#1022206 abcdef879 S1 - doneagain\orig - Copy\20170532_155703390027.D.csv',
'C:\Auto\201907 compare\AEG data\#1022206 abcdef879 S1 - doneagain\orig - Copy\20170532_155901884437.A.csv',
'C:\Auto\201907 compare\AEG data\#1022206 abcdef879 S1 - doneagain\orig - Copy\20170532_155910324109.B.csv',
'C:\Auto\201907 compare\AEG data\#1022206 abcdef879 S1 - doneagain\orig - Copy\20170532_155918771536.C.csv',
'C:\Auto\201907 compare\AEG data\#1022206 abcdef879 S1 - doneagain\orig - Copy\20170532_155927211990.D.csv']
###listOfFiles = ['20170532_155638064567.A.csv', '20190732_155646505788.B.csv', '20190732_155654944787.C.csv', '20190732_155703390027.D.csv', '20170532_155901884437.A.csv', '20170532_155910324109.B.csv', '20190732_155918771536.C.csv', '20190732_155927211990.D.csv']
Afilenames = sorted(filter_name("A", listOfFiles), key=sort_key)
Bfilenames = sorted(filter_name("B", listOfFiles), key=sort_key)
Cfilenames = sorted(filter_name("C", listOfFiles), key=sort_key)
Dfilenames = sorted(filter_name("D", listOfFiles), key=sort_key)
print("# Of Files: n")
print(len(listOfFiles))
print("List Of Files: n")
print(listOfFiles)
print("# Of A Files: n")
print(len(Afilenames))
print("# Of B Files: n")
print(len(Bfilenames))
print("# Of C Files: n")
print(len(Cfilenames))
print("# Of D Files: n")
print(len(Dfilenames))
打印语句的输出不正确。
Total files = 8
Total A files = 8
Total B files = 2
这是一个奇怪的问题..任何提示?
您的问题是您的filter_name
函数允许filterString
名称中的任何位置,而glob
返回的名称不仅单独使用文件名,而且是文件的完整路径。<<<<<<<<<<
您的路径全部包括CA
(在目录中Auto
和AEG data
中(,它们都包括C
(驱动器字母(,因此它们 all 通过A
和C
的过滤器(均不是B
(否D
出现在最终文件名之外的路径中,因此它们会按照您的期望进行过滤(。
如果您想仅根据名称过滤而不是完整的路径过滤,请以测试目的剥离路径:
def filter_name(filterString, fileNames):
filtered = []
for name in fileNames:
if filterString in os.path.basename(name): # basename removes the rest of the path
filtered.append(name)
return filtered