鱼C论坛

 找回密码
 立即注册
查看: 1569|回复: 4

[已解决]python自动办公代码运行结果与预期不符

[复制链接]
发表于 2023-3-16 10:02:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这里请教下各位论讨大神,自己尝试编辑一个自动办公(关于筛选文件的)目标是通过代码实现台账遍历文件夹的文件名对比台账中记录的情况,返回列表结果到新表中。

EXCEL台账“项目01.xlsx”中记录了已经归档的档案编号(比如,CR10052022090030)PS:目前台账就记录了100条已归档
文件夹“对比工作预备”中存放了现有取号的档案编号的文件夹子,并备注了归档情况(文件名:CR10052022090099 - 未归档;文件名:CR10052022090088 - 已归档)
代码目的:从台账第一项编号起,对比文件夹中对应的文件名情况,返回结果到列表New_list中,然后将结果列表写入EXCEL的Sheet2中查看。

import pandas as pd
import os


data = pd.read_excel('项目01.xlsx',sheet_name='Sheet1')   #将EXCEL台账中记录的编号读取进DATAFRAME
Target_filename = os.listdir('I:\对比工作预备\')                   #将路径下的文件夹中的文件读取进
New_list = []                                                                   #设计一个空列表,后续用于存储遍历结果


for Tar_filevolume in range(len(Target_filename)):
     for Ex_filevolume in range(data['档案编号'].shape[0]):

       if Target_filename[Tar_filevolume][:16] == data['档案编号'].loc[Ex_filevolume] :
          X = Target_filename[Tar_filevolume][:16]+'已归档'
          New_list.append(X)
          break
       else:
          if Ex_filevolume == data['档案编号'].shape[0]:
             y = Target_filename[Tar_filevolume][:16]+'未归档'
             New_list.append(y)
             break
          else:
             continue

Writer = pd.ExcelWriter('项目01.xlsx',mode='a')                     #将查询结果New_list列表写入Sheet2中
New_excel = pd.DataFrame(New_list)
New_excel.to_excel(Writer,sheet_name='Sheet2')
Writer.close()

最后的执行结果是:
只把台账中100个已归档的编号写入了新表sheet2中,而文件夹中未归档的编号缺未写入sheet2中。

请各位大神帮忙指导下,谢谢O(∩_∩)O
最佳答案
2023-3-16 11:44:15
你好!从你的代码中,我发现了一个小问题。在判断Ex_filevolume == data['档案编号'].shape[0]这个条件的时候,实际上在循环中永远无法满足这个条件,

因为Ex_filevolume的取值范围是0到data['档案编号'].shape[0] - 1。因此,你需要将条件改为Ex_filevolume == data['档案编号'].shape[0] - 1。

下面是修改后的代码:
import pandas as pd
import os

data = pd.read_excel('项目01.xlsx', sheet_name='Sheet1')
Target_filename = os.listdir('I:\对比工作预备\')
New_list = []

for Tar_filevolume in range(len(Target_filename)):
    found = False
    for Ex_filevolume in range(data['档案编号'].shape[0]):
        if Target_filename[Tar_filevolume][:16] == data['档案编号'].loc[Ex_filevolume]:
            X = Target_filename[Tar_filevolume][:16] + '已归档'
            New_list.append(X)
            found = True
            break
        else:
            if Ex_filevolume == data['档案编号'].shape[0] - 1:
                y = Target_filename[Tar_filevolume][:16] + '未归档'
                New_list.append(y)
            else:
                continue
    if not found:
        y = Target_filename[Tar_filevolume][:16] + '未归档'
        New_list.append(y)

Writer = pd.ExcelWriter('项目01.xlsx', mode='a')
New_excel = pd.DataFrame(New_list)
New_excel.to_excel(Writer, sheet_name='Sheet2')
Writer.close()

这样应该可以正确处理未归档的编号,并将其写入到新表Sheet2中。希望这能帮到你!如果有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-16 11:44:15 | 显示全部楼层    本楼为最佳答案   
你好!从你的代码中,我发现了一个小问题。在判断Ex_filevolume == data['档案编号'].shape[0]这个条件的时候,实际上在循环中永远无法满足这个条件,

因为Ex_filevolume的取值范围是0到data['档案编号'].shape[0] - 1。因此,你需要将条件改为Ex_filevolume == data['档案编号'].shape[0] - 1。

下面是修改后的代码:
import pandas as pd
import os

data = pd.read_excel('项目01.xlsx', sheet_name='Sheet1')
Target_filename = os.listdir('I:\对比工作预备\')
New_list = []

for Tar_filevolume in range(len(Target_filename)):
    found = False
    for Ex_filevolume in range(data['档案编号'].shape[0]):
        if Target_filename[Tar_filevolume][:16] == data['档案编号'].loc[Ex_filevolume]:
            X = Target_filename[Tar_filevolume][:16] + '已归档'
            New_list.append(X)
            found = True
            break
        else:
            if Ex_filevolume == data['档案编号'].shape[0] - 1:
                y = Target_filename[Tar_filevolume][:16] + '未归档'
                New_list.append(y)
            else:
                continue
    if not found:
        y = Target_filename[Tar_filevolume][:16] + '未归档'
        New_list.append(y)

Writer = pd.ExcelWriter('项目01.xlsx', mode='a')
New_excel = pd.DataFrame(New_list)
New_excel.to_excel(Writer, sheet_name='Sheet2')
Writer.close()

这样应该可以正确处理未归档的编号,并将其写入到新表Sheet2中。希望这能帮到你!如果有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-16 13:54:29 | 显示全部楼层
isdkz 发表于 2023-3-16 11:44
你好!从你的代码中,我发现了一个小问题。在判断Ex_filevolume == data['档案编号'].shape[0]这个条件的时 ...

万分感谢大神解答!!!!
再向大神请教下:
1、Ex_filevolume是range()从0、1、2.....到100,然后data['档案编号'].shape[0]是101,所以这个条件是始终不满足,所以记录列表中不会有不满足的编号,是这么个思路吗?
2、设置 found变量的目的是?23-25段代码的意图是?
望大神继续指导,O(∩_∩)O
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-16 13:58:16 | 显示全部楼层
bio911 发表于 2023-3-16 13:54
万分感谢大神解答!!!!
再向大神请教下:
1、Ex_filevolume是range()从0、1、2.....到100,然后data ...


1、是的,你理解得很正确。Ex_filevolume的取值范围是从0到100,而data['档案编号'].shape[0]的值是101。

所以,在你原始的代码中,条件Ex_filevolume == data['档案编号'].shape[0]始终无法满足。

因此,我们需要将条件改为Ex_filevolume == data['档案编号'].shape[0] - 1,这样就可以正确处理未归档的编号。



2、我们设置found变量的目的是为了在遍历data中的档案编号时,记录当前文件名在data中是否找到了对应的归档编号。

如果找到了,我们就将其标记为已归档,并将found设置为True。

而如果在遍历完整个data后都没有找到对应的归档编号,那么found仍然是False,此时我们就可以将当前文件名标记为未归档。

在23-25行代码中,我们根据found的值来决定是否将当前文件名标记为未归档。

如果found为False,则表示当前文件名没有在data中找到对应的归档编号,因此我们将其标记为未归档。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-16 14:31:24 | 显示全部楼层
isdkz 发表于 2023-3-16 13:58
1、是的,你理解得很正确。Ex_filevolume的取值范围是从0到100,而data['档案编号'].shape[0]的值是101 ...

收到,再次感谢大神答疑,O(∩_∩)O
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 07:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表