xiaoqu525 发表于 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: 系统找不到指定的路径。: 'F:\\python_work\\PDF_Name\\dist\\PDF_New01\\发货单.pdf' -> ''
Failed to execute script PDF_New01

F:\python_work\PDF_Name\dist\PDF_New01>

hrp 发表于 2020-7-7 20:06:31

xiaoqu525 发表于 2020-7-7 19:51
Microsoft Windows [版本 10.0.17763.107]
(c) 2018 Microsoft Corporation。保留所有权利。



路径搞错了吧,突然想起来,打包成exe后os.getcwd()得到的是一个奇怪的路径。等会我开机试试行不行{:10_250:}

xiaoqu525 发表于 2020-7-7 20:21:49

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

大佬QQ多少啊。。。

xiaoqu525 发表于 2020-7-7 21:19:23

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

大佬大佬大佬

hrp 发表于 2020-7-7 22:00:31

xiaoqu525 发表于 2020-7-7 21:19
大佬大佬大佬

我不是大佬{:10_250:}
吃完饭给忘了不好意思{:10_250:}

xiaoqu525 发表于 2020-7-7 22:12:25

hrp 发表于 2020-7-7 22:00
我不是大佬
吃完饭给忘了不好意思

我一直在等你啊。。。大佬

hrp 发表于 2020-7-7 22:17:59

xiaoqu525 发表于 2020-7-7 22:12
我一直在等你啊。。。大佬

试了一下,解析出来的pathnew是空的,而且你历遍的table也没有用上,不知道你要拿什么字段来做文件名呢?我暂且用文件前几个字来试

xiaoqu525 发表于 2020-7-7 22:29:14

WLDD20200504000234,找到W的索引值然后+18。。就能取出来这东西,然后重命名。。

xiaoqu525 发表于 2020-7-7 22:30:14

hrp 发表于 2020-7-7 22:17
试了一下,解析出来的pathnew是空的,而且你历遍的table也没有用上,不知道你要拿什么字段来做文件名呢? ...

太奇怪了,我直接pycharm能运行没问题。。但是我要换机子弄,不可能每台机都配置Python环境,所以打包exe,打包了就不行了

hrp 发表于 2020-7-7 22:36:05

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

打包后os.getcwd()得到的路径不是exe所在路径,所以要换一个方法。
另外你要找到WLDD20200504000234然后把文件重命名成WLDD20200504000234吗?WLDD格式是固定的吗?

xiaoqu525 发表于 2020-7-7 22:38:50

固定的。。我已经换了os.getcwd了,改用os.path.dirname了,还是一样

xiaoqu525 发表于 2020-7-7 22:39:34

hrp 发表于 2020-7-7 22:36
打包后os.getcwd()得到的路径不是exe所在路径,所以要换一个方法。
另外你要找到WLDD20200504000234然后 ...

这是一个表格类的pdf。。

hrp 发表于 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
      text = first_page.extract_text()
      # print(text)
      pdf.close()
    index = text.find('WLDD')
    if index != -1:
      new_name = text
    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就可能是空的,会导致重命名报错,要处理空的情况

hrp 发表于 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那么就要保证表格在第一页,否则就会出错。
      first_page = pdf.pages
      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
            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("提示", "重命名已完成")

Tip0 发表于 2020-7-8 01:00:15

xiaoqu525 发表于 2020-7-8 07:10:32

hrp 发表于 2020-7-7 23:16
重新写了适应表格,你试试

提示这个AttributeError: 'NoneType' object has no attribute 'find'

hrp 发表于 2020-7-8 08:11:53

xiaoqu525 发表于 2020-7-8 07:10
提示这个AttributeError: 'NoneType' object has no attribute 'find'

那可能是你试的时候没解析到表格,我自己随便建的一个表格pdf是可以正常重命名的。first_page = pdf.pages是只取pdf的第一页,确认你的表格是不是在第一页,不是第一页就修改那个0。print一下first_page、tables看看都解析出来啥自己再改,白天没空帮你改了{:10_250:}

xiaoqu525 发表于 2020-7-8 08:45:52

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

好。。是在第一页的
页: 1 [2]
查看完整版本: :FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。