python - 枚举列表中具有相似字符串的函数
问题描述
编写脚本来读取多个 csv 文件。我有一个包含 3 个不同条形码的列表。每个代码都有三个不同的文件。每个代码都有相同的前缀“5SvF9yM6ldXGRpBz”。这是较长的条形码列表的一部分。
我有另一个找到条形码的目录列表。为了让脚本运行,我需要所有三个文件
我的目标是建立一个包含不同条形码和目录的字典。我的输出有问题。三个条码之一丢失。'5SvF9yM6ldXGRpBz1'。我认为问题在于 for 循环中的枚举函数。
directories = ['C:/Desktop/5SvF9yM6ldXGRpBz1_FIRST.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz11_FIRST.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz12_FIRST.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz1_SECOND.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz11_SECOND.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz12_SECOND.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz1_THIRD.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz11_THIRD.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz12_THIRD.csv']
barcodes = ['5SvF9yM6ldXGRpBz1',
'5SvF9yM6ldXGRpBz11',
'5SvF9yM6ldXGRpBz12',
'5SvF9yM6ldXGRpBz1',
'5SvF9yM6ldXGRpBz11',
'5SvF9yM6ldXGRpBz12',
'5SvF9yM6ldXGRpBz1',
'5SvF9yM6ldXGRpBz11',
'5SvF9yM6ldXGRpBz12']
#print(directories)
#print(barcodes)
barcodes = list(set(barcodes))
barcodes = [s for s in barcodes if "5SvF9yM6ldXGRpBz" in s] #Want to process codes with this prefix
directories = list(set(directories))
#print(directories)
directories = [s for s in directories if "5SvF9yM6ldXGRpBz" in s]
#print(directories)
barcode_dirs_indexes =[]
for b_code in barcodes:
#print(b_code)
index = [i for i,x in enumerate(directories) if b_code in x] #I think the issue is here
barcode_dirs_indexes.append(index)
#print(barcode_dirs_indexes)
barcode_dirs = [[directories[x] for x in y] for y in barcode_dirs_indexes]
# only process barcode with 3 directories, i.e. the barcode has 3 files
data_barcode_dir_indx = [i for i,x in enumerate(barcode_dirs) if len(x) == 3 ]
data_barcode_dirs = [x for x in barcode_dirs if len(x) == 3]
#print(data_barcode_dir_indx)
#print(data_barcode_dirs)
complete_data_barcodes = [barcodes[x] for x in data_barcode_dir_indx]
print(complete_data_barcodes)
dir_file_dict = dict(zip(complete_data_barcodes, data_barcode_dirs))
dir_file_dict 的输出:缺少条形码:5SvF9yM6ldXGRpBz1
{'5SvF9yM6ldXGRpBz12': ['C:/Desktop/5SvF9yM6ldXGRpBz12_FIRST.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz12_THIRD.csv', 'C:/Desktop/5SvF9yM6ldXGRpBz12_SECOND.csv'],
'5SvF9yM6ldXGRpBz11': ['C:/Desktop/5SvF9yM6ldXGRpBz11_FIRST.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz11_SECOND.csv', 'C:/Desktop/5SvF9yM6ldXGRpBz11_THIRD.csv']}
解决方案
你可以这样做:
d = {}
for i,j in zip(barcodes, directories):
if not d.get(i):
d[i] = []
d[i].append(j)
print(d)
推荐阅读
- python - 使用 Python 在从 FTP 服务器下载的文件中添加时间戳
- android - 使用 diffutil 的回收器适配器,无法看到新添加的项目用户需要向下滚动
- javascript - 需要通过 Jasmine 测试的 Javascript 中的向量
- c++ - 我在构造函数中检测到 valgrid 的内存问题。我该如何解决这个问题?
- python - 如何在没有内存问题的情况下计算排列
- rust - Rust 柴油有条件地过滤查询
- c - C 程序:我如何阅读这个递归程序
- reactjs - Toastify 类在我的反应应用程序组件中不起作用
- c++ - 二维数组分配后的分段错误
- java - 发生异常后,我们如何从系统中正确关闭和清理 JMS 连接、会话、消费者和生产者?