鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: xiaoqu525

:FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。

[复制链接]
 楼主| 发表于 2020-7-7 19:51:13 | 显示全部楼层
hrp 发表于 2020-7-7 19:46
独占模式打开文件没关闭?具体报错信息是什么

Microsoft Windows [版本 10.0.17763.107]
(c) 2018 Microsoft Corporation。保留所有权利。

C:\Users\lijing>f:

F:\>cd F:\python_work\PDF_Name

F:\python_work\PDF_Name>PDF_New01.exe
'PDF_New01.exe' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

F:\python_work\PDF_Name>cd F:\python_work\PDF_Name\dist\PDF_New01

F:\python_work\PDF_Name\dist\PDF_New01>PDF_New01.exe
Traceback (most recent call last):
  File "PDF_New01.py", line 40, in <module>
  File "os.py", line 268, in renames
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'F:\\python_work\\PDF_Name\\dist\\PDF_New01\\发货单.pdf' -> ''
[8436] Failed to execute script PDF_New01

F:\python_work\PDF_Name\dist\PDF_New01>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-7 20:06:31 From FishC Mobile | 显示全部楼层
xiaoqu525 发表于 2020-7-7 19:51
Microsoft Windows [版本 10.0.17763.107]
(c) 2018 Microsoft Corporation。保留所有权利。


路径搞错了吧,突然想起来,打包成exe后os.getcwd()得到的是一个奇怪的路径。等会我开机试试行不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-7 20:21:49 | 显示全部楼层
hrp 发表于 2020-7-7 20:06
路径搞错了吧,突然想起来,打包成exe后os.getcwd()得到的是一个奇怪的路径。等会我开机试试行不行{:10_2 ...

大佬QQ多少啊。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-7 21:19:23 | 显示全部楼层
hrp 发表于 2020-7-7 20:06
路径搞错了吧,突然想起来,打包成exe后os.getcwd()得到的是一个奇怪的路径。等会我开机试试行不行{:10_2 ...

大佬大佬大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-7 22:00:31 From FishC Mobile | 显示全部楼层
xiaoqu525 发表于 2020-7-7 21:19
大佬大佬大佬

我不是大佬
吃完饭给忘了不好意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-7 22:12:25 | 显示全部楼层
hrp 发表于 2020-7-7 22:00
我不是大佬
吃完饭给忘了不好意思

我一直在等你啊。。。大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-7 22:17:59 | 显示全部楼层
xiaoqu525 发表于 2020-7-7 22:12
我一直在等你啊。。。大佬

试了一下,解析出来的pathnew是空的,而且你历遍的table也没有用上,不知道你要拿什么字段来做文件名呢?我暂且用文件前几个字来试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-7 22:29:14 From FishC Mobile | 显示全部楼层
WLDD20200504000234,找到W的索引值然后+18。。就能取出来这东西,然后重命名。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-7 22:30:14 From FishC Mobile | 显示全部楼层
hrp 发表于 2020-7-7 22:17
试了一下,解析出来的pathnew是空的,而且你历遍的table也没有用上,不知道你要拿什么字段来做文件名呢? ...

太奇怪了,我直接pycharm能运行没问题。。但是我要换机子弄,不可能每台机都配置Python环境,所以打包exe,打包了就不行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-7 22:36:05 | 显示全部楼层
xiaoqu525 发表于 2020-7-7 22:30
太奇怪了,我直接pycharm能运行没问题。。但是我要换机子弄,不可能每台机都配置Python环境,所以打包exe ...

打包后os.getcwd()得到的路径不是exe所在路径,所以要换一个方法。
另外你要找到WLDD20200504000234然后把文件重命名成WLDD20200504000234吗?WLDD格式是固定的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-7 22:38:50 From FishC Mobile | 显示全部楼层
固定的。。我已经换了os.getcwd了,改用os.path.dirname了,还是一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-7 22:39:34 From FishC Mobile | 显示全部楼层
hrp 发表于 2020-7-7 22:36
打包后os.getcwd()得到的路径不是exe所在路径,所以要换一个方法。
另外你要找到WLDD20200504000234然后 ...

这是一个表格类的pdf。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-7 22:48:29 | 显示全部楼层
本帖最后由 hrp 于 2020-7-7 23:17 编辑
xiaoqu525 发表于 2020-7-7 22:39
这是一个表格类的pdf。。


因为我手上没有表格类的,我就试了text,可以正常运行,你改改。
# coding = utf-8

import os
import tkinter.messagebox

import pdfplumber

realdir = os.path.dirname(os.path.realpath(__file__))

pdffiles = [
    os.path.join(realdir, f) for f in os.listdir(realdir)
    if os.path.isfile(f) and f[-3:] == 'pdf'
]
# print(pdffiles)

for pdffile in pdffiles:
    with pdfplumber.open(pdffile) as pdf:
        first_page = pdf.pages[0]
        text = first_page.extract_text()
        # print(text)
        pdf.close()
    index = text.find('WLDD')
    if index != -1:
        new_name = text[index: index + 18]
    else:
        # 没找到W则跳过。
        continue
    new_name += '.pdf'
    # print(new_name)
    new_path = os.path.join(realdir, new_name)
    os.rename(pdffile, new_path)
tkinter.messagebox.showinfo("提示", "重命名已完成")
要注意如果表格不在第一页上,那最后的new_path就可能是空的,会导致重命名报错,要处理空的情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-7 23:16:53 | 显示全部楼层
本帖最后由 hrp 于 2020-7-7 23:55 编辑
xiaoqu525 发表于 2020-7-7 22:39
这是一个表格类的pdf。。


重新写了适应表格,你试试
# coding = utf-8
# 最终版本

import os
import tkinter.messagebox

import pdfplumber

realdir = os.path.dirname(os.path.realpath(__file__))

pdffiles = [
    os.path.join(realdir, f) for f in os.listdir(realdir)
    if os.path.isfile(f) and f[-3:] == 'pdf'
]

for pdffile in pdffiles:
    with pdfplumber.open(pdffile) as pdf:
        # 这里写pdf.pages[0]那么就要保证表格在第一页,否则就会出错。
        first_page = pdf.pages[0]
        tables = first_page.extract_tables()

    strings = (string for table in tables for row in table for string in row)

    new_name = None
    for string in strings:
        index = string.find('WLDD')
        if index != -1:
            new_name = string[index:index + 18]
            break

    if new_name:
        new_path = os.path.join(realdir, new_name + '.pdf')
        try:
            os.rename(pdffile, new_path)
        # 重命名失败则跳过(一般是已存在同名文件)。
        except Exception:
            pass

tkinter.messagebox.showinfo("提示", "重命名已完成")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 01:00:15 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-8 07:10:32 | 显示全部楼层
hrp 发表于 2020-7-7 23:16
重新写了适应表格,你试试

提示这个AttributeError: 'NoneType' object has no attribute 'find'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 08:11:53 From FishC Mobile | 显示全部楼层
xiaoqu525 发表于 2020-7-8 07:10
提示这个AttributeError: 'NoneType' object has no attribute 'find'

那可能是你试的时候没解析到表格,我自己随便建的一个表格pdf是可以正常重命名的。first_page = pdf.pages[0]是只取pdf的第一页,确认你的表格是不是在第一页,不是第一页就修改那个0。print一下first_page、tables看看都解析出来啥自己再改,白天没空帮你改了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-8 08:45:52 | 显示全部楼层
hrp 发表于 2020-7-8 08:11
那可能是你试的时候没解析到表格,我自己随便建的一个表格pdf是可以正常重命名的。first_page = pdf.page ...

好。。是在第一页的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 07:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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