-1

这个问题是@user:bone007问题的延伸,该问题由于指导问题而被社区关闭。我尝试了一些逻辑,但我没有得到任何线索,这是解决问题的一些要点。

我有各种考勤档案。文件的属性是:

  1. 格式为.txt.
  2. 每个文件包含相同数量的人。
  3. 每个文件的数据newline分开存储。
  4. 文件如下[file1.txt, file2.txt, file3.txt . . . .

看样本:

file1.txt                      |           file2.txt
                               |
abc|absent                     |           abc|absent
                               |
bcd|joined                     |           bcd|joined 
                               |
cde|joined                     |           cde|joined

要求 :

  1. 我想要 o/p 给joined-time每个成员的总数。

我应用的逻辑在这里:

l = []
with open("file1.txt", 'r') as f:
    for i,j in enumerate(f):
        if i%2 != 0:
            continue
        l.append({j.strip('\n').split('|')[0] : j.strip('\n').split('|')[1]})

print(l)

但是这个逻辑的问题是,这适用于单个文件,如何为多个文件扩展它

4

1 回答 1

0

例如,您在此文件中显示了此工作区:

在此处输入图像描述

我将我的代码分成小节:

txt file在给定的工作区中过滤

import os             
all_files = os.listdir("./")
txt_files = list(filter(lambda x: x[-4:] == '.txt', all_files)) 

从每个文件中迭代并map of each userdict

l = []
for file in txt_files:
    with open(rf"{file}", 'r') as f:
        l1 = {}
        for i,j in enumerate(f):
            if i%2 != 0:
                continue
            l1[j.strip('\n').split('|')[0]] = j.strip('\n').split('|')[1]
        l.append(l1)

最后添加相似的名称值并存储到result dict

ind = ['absent', 'joined']
result = {'abc': 0, 'bcd': 0, 'cde':0}

for i in l:
    item = i.keys()
    for j in item:
        result[j] += ind.index(i[j])

print(result)

输出:字典格式

{'abc': 0, 'bcd': 2, 'cde': 2} 

对于短逻辑,请使用:

import os             
all_files = os.listdir("./")
txt_files = list(filter(lambda x: x[-4:] == '.txt', all_files)) 

l = []
ind = ['absent', 'joined']
result = {'abc': 0, 'bcd': 0, 'cde':0}


for file in txt_files:
    with open(rf"{file}", 'r') as f:
        l1 = {}
        for i,j in enumerate(f):
            if i%2 != 0:
                continue
            l1[j.strip('\n').split('|')[0]] = j.strip('\n').split('|')[1]
        l.append(l1)
    
    for i in l:
        item = i.keys()
        for j in item:
            result[j] += ind.index(i[j])
    l.pop()

print(result)

输出:字典格式

{'abc': 0, 'bcd': 2, 'cde': 2} 
于 2021-04-03T06:38:51.460 回答