首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >命名元组缺少必需的位置参数

命名元组缺少必需的位置参数
EN

Stack Overflow用户
提问于 2021-07-18 05:55:23
回答 1查看 63关注 0票数 1

我是编程新手。我正在写一个从pdf中提取数据的Python脚本。我在使用tuple时遇到了问题。我不能提供它的论据。我认为这是我的逻辑不正确,包括缩进,序列,或其他东西。

我希望得到一些关于为什么我得到这个错误的解释。

这是我的PDF示例(我必须屏蔽一些敏感信息)

这就是我想要达到的目标

我得到了这个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Traceback (most recent call last):
  File "/Users/jeff/PycharmProjects/extractFreightInvoice/main.py", line 79, in <module>
    lines.append(Line('invDate, invNumber, poNumber, contactName, jobNumber, '
TypeError: <lambda>() missing 11 required positional arguments: 'invNumber', 'poNumber', 'contactName', 'jobNumber', 'jobName', 'invDescription', 'siteAddress', 'invItemsDesc', 'invItemsQty', 'invItemsUnitPrice', and 'invItemsAmount'

我的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# This is a pdf extractor
import re
import pdfplumber
import pandas as pd
from collections import namedtuple

Line = namedtuple('Line', 'invDate, invNumber, poNumber, contactName, jobNumber, '
                          'jobName, invDescription, siteAddress, invItemsDesc, invItemsQty, invItemsUnitPrice, '
                          'invItemsAmount ')

invDate_re = re.compile(r'(Clever Core NZ Limited\s)(\d{1,2}/\d{1,2}/\d{4})(.+)')
invNumber_re = re.compile(r'(IN\d{6})')
poNumber_re = re.compile(r'\d{4}')
contactNameBen_re = re.compile(r'(Jordan\s.+)')
contactNameCraig_re = re.compile(r'(Lorna\s.+)')
jobNumber_re = re.compile(r'(J[\d]{6})')
jobName_re = re.compile(r'(Job Name)')
invDescription_re = re.compile(r'(Invoice Description)')
siteAddress_re = re.compile(r'(Site address.*)')
colHeading_re = re.compile(r'((Description)(.* Quantity.* Unit Price.*))')
invItems_re = re.compile(
    r'(.+) (([0-9]*[.])?[0-9]+) (([0-9]*[.])?[0-9]+) (\d*\?\d+|\d{1,3}(,\d{3})*(\.\d+)?)')
# quoteLines_re = re.compile(r'(.+)(:\s*)(.+)')
# clevercorePriceLine_re = re.compile(r'(.* First .*\s?)(-\s?.*\$)(\s*)(.+)')

file = 'CombinedInvoicePdf.pdf'

lines = []

with pdfplumber.open(file) as myPdf:
    for page in myPdf.pages:
        text = page.extract_text()
        lines = text.split('\n')
        index = 0
        for i in range(len(lines)):

            line = lines[i]

            invDateLine = invDate_re.search(line)
            invNumberLine = invNumber_re.search(line)
            poNumberLine = poNumber_re.search(line)
            contactNameJordanLine = contactNameJordan_re.search(line)
            contactNameLornaLine = contactNameLorna_re.search(line)
            jobNumberLine = jobNumber_re.search(line)
            jobNameLine = jobName_re.search(line)
            invDescriptionLine = invDescription_re.search(line)
            colHeadingLine = colHeading_re.search(line)
            siteAddressLine = siteAddress_re.search(line)
            invItemsLine = invItems_re.search(line)

            if invDateLine:
                invDate = invDateLine.group(2)
            if invNumberLine:
                invNumber = invNumberLine.group(1)
            if poNumberLine and len(line) == 4:
                poNumber = poNumberLine.group(0)
            if contactNameBenLine:
                contactName = 'Jordan Michael'
            if contactNameCraigLine:
                contactName = 'Lorna Tolentin'
            if jobNumberLine:
                jobNumber = lines[i]
            if jobNameLine:
                jobName = (lines[i + 1])
            if invDescriptionLine:
                invDescription = lines[i + 1]
            if siteAddressLine:
                if len(lines[i + 1]) > 0 and len(lines[i + 1]) == 0:
                    siteAddress = lines[i + 1]
                elif len(lines[i + 1]) > 0 and len(lines[i + 1]) > 0:
                    siteAddress = lines[i + 1] + ' ' + lines[i + 2]
                else:
                    siteAddress = 'check invoice'
            if invItemsLine and invItemsLine[2] != '06':
                invItemsDesc = invItemsLine.group(1)
                invItemsQty = invItemsLine.group(2)
                invItemsUnitPrice = invItemsLine.group(4)
                invItemsAmount = invItemsLine.group(6)
            lines.append(Line('invDate, invNumber, poNumber, contactName, jobNumber, '
                              'jobName, invDescription, siteAddress, invItemsDesc, invItemsQty, invItemsUnitPrice, '
                              'inItemsAmount'))
df = pd.DataFrame(lines)
print(df)
print(df.head())
df.to_csv('freightCharges.csv')
EN

回答 1

Stack Overflow用户

发布于 2021-07-18 06:08:23

Line是一个带有参数和字段的tuple子类

您需要使用单独的参数来填充它们,而不是使用单个字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lines.append(Line('invDate', 'invNumber', 'poNumber', 'contactName', 'jobNumber', 'jobName', 'invDescription',
                  'siteAddress', 'invItemsDesc', 'invItemsQty', 'invItemsUnitPrice', 'inItemsAmount'))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68426420

复制
相关文章
将 php-fpm 配置为服务
请将以下脚本适当修改后命名为php-fpm #!/bin/bash # # Startup script for the PHP-FPM server. # # chkconfig: 345 85 15 # description: PHP is an HTML-embedded scripting language # processname: php-fpm # config: /usr/local/php/etc/php.ini # Source function library. . /etc/r
老高的技术博客
2022/12/28
3500
vscode端点配置
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of e
ACK
2022/08/26
8980
我在实施蓝绿部署后遇到的问题和解决方法
前几周,我被迫拒绝“批准”了 GitLab 项目的合并请求。我不喜欢他们提出的解决方案,即,对我们的应用程序代码库进行特定的更改,以支持 蓝绿发布。它向我发出了一个代码更改的警告:将部署与代码绑定了;在环境应该是不可见和可互换的情况下,以编写代码来支持环境。创建这些类型的依赖将我们与特定的平台和发布方法绑定了,而额外的代码会导致各种可能的缺陷和错误,这些缺陷和错误可能会因环境而异,因此极难测试。
深度学习与Python
2023/03/01
9640
我在实施蓝绿部署后遇到的问题和解决方法
Azure恢复服务-配置DPM联机保护
从System Center 2012 Service Pack 1开始,我们可以使用DPM把被保护的服务器和数据备份到Microsoft Azure备份保管库当中。
李珣
2019/03/14
6180
为 Vue 配置 GraphQL API
接前文为 Django 配备 GraphQL API,Django 提供 GraphQL 接口服务之后,我们需要让前端来消费这些接口数据,以 Vue 为例,看一看前端如何访问后端 GraphQL API。本文提供一个跑的通的 demo,可以先收藏,后面如有需要可以直接使用。
somenzz
2021/07/01
1.2K0
为 Vue 配置 GraphQL API
API管理平台的部署方式和成功案例
API Manager和API网关公有云托管方式。客户将自己的API后端集成到API网关
魏新宇
2018/08/16
1.5K0
API管理平台的部署方式和成功案例
Service Fabric 与 Ocelot 集成
云应用程序通常都需要使用前端网关,为用户、设备或其他应用程序提供同一个入口点。 在 Service Fabric 中,网关可以是任意无状态服务(如 ASP.NET Core 应用程序) 。
张善友
2018/09/28
1.5K0
Service Fabric 与 Ocelot 集成
mysql多实例(多个配置文件方式)设置为多个服务单独管理启动停止
有个大佬搞了一套mysql多实例(多个配置文件方式),却没有任何管理方式,想重启还找 找pid , kill掉,再通过 mysql 指定配置文件启动,极度不方便,想做成。
用户2323866
2021/06/29
1.4K0
Azure 静态 web 应用集成 Azure 函数 API
前几次我们演示了如何通过Azure静态web应用功能发布vue跟blazor的项目(使用 Azure静态web应用+Github全自动部署VUE站点、使用Azure静态Web应用部署Blazor Webassembly应用)。但是一个真正的web应用,总是免不了需要后台api服务为前端提供数据或者处理数据的能力。同样前面我们也介绍了Azure函数服务,Azure函数的http trigger可以对http作出响应,可以完美的承当web api的角色。现在Azure静态web应用可以直接集成Azure函数,使得一次发布可以同时发布前端项目(vue、blazor)及后台api服务(azure函数)。
MJ.Zhou
2020/11/24
1.2K0
Azure 静态 web 应用集成 Azure 函数 API
SCOM 2012 R2监控Microsoft Azure服务(2)配置Azure监控
上一篇文章介绍了如何添加Azure管理包,并配置Azure订阅进行管理。但配置完成后,SCOM还无法对Azure的云、存储、虚拟机进行监控,那么本章内容就会进行监控的配置。
李珣
2019/03/14
4420
tomcat manager配置
保存后重启tomcat,当前用户就拥有tomcat manager页面的所有权限了
用户2409797
2019/02/25
1.2K0
Kubernetes 为API对象配置配额
本任务将展示如何配置API对象的配额,包括对Kubernetes PersistentVolumeClaim对象 和Service对象的配额配置。配额限制了可以在某一名字空间(namespace)中所创建的特定类型的对象 的数量。可以通过ResourceQuota 对象设定配额。
kubernetes中文社区
2019/06/24
7490
Kubernetes 为API对象配置配额
在一个 Hypervisor 上配置多个 Ceph 后端
因为我们需要使用主机聚集我们需要的特定调度器过滤器,所以使用以下方法配置你的 Nova 调度器:
用户7108768
2021/09/24
8290
将机器学习模型部署为REST API
这些疑问,我们以前碰到过,通过不断的摸索,试验出了不同的复杂机器学习的上线方法,来满足不同场景的需求。在这里把实践经验整理分享,希望对大家有所帮助。(我们的实践经验更多是倾向于业务模型的上线流程,广告和推荐级别的部署请自行绕道)。
机器学习AI算法工程
2019/10/28
3.4K0
将机器学习模型部署为REST API
配置Linux系统协作代理:将多个代理服务器串联起来
当谈及在Linux系统上配置协作代理时,将多个代理服务器串联起来是一个重要的主题。这种配置可以帮助提高网络访问速度、增加隐私保护以及实现负载均衡。本文将为您提供一个专业的解决方案,并附带实际的操作价值和必要的代码示例。
用户614136809
2023/09/06
3670
将IoTDB注册为Windows服务
昨天写的文章《Windows Server上部署IoTDB集群》,Windows下的IoTDB是控制台程序,打开窗口后,很容易被别人给关掉,因此考虑做成Windows服务,nssm正是解决该问题的利器。
张善友
2023/03/09
1.2K0
将IoTDB注册为Windows服务
微软Windows Azure或将改名
微软旗下云服务Windows Azure即将更名为Microsoft Azure。 据笔者消息源表示,微软将于本周宣布将“Windows Azure”云操作系统更名为“Microsoft Azure”的计划。 据两位熟悉微软计划的匿名消息人士透露,预计微软将在3月25日公布该计划,并从4月3日起正式生效——也就是微软今年即将在旧金山召开的开发者大会(Build conference)的第二天。 这项更名计划是很有意义的,毕竟当前的Windows Azure云计算平台已不仅仅是Windows
静一
2018/03/16
8480
Contact Manager Web API 示例[2] Web API Routing
联系人管理器web API是一个Asp.net web api示例程序,演示了通过ASP.NET Web API 公开联系信息,并允许您添加和删除联系人,示例地址http://code.msdn.microsoft.com/Contact-Manager-Web-API-0e8e373d。 Contact Manager Web API 示例[1]CRUD 操作 已经做了一个基本的介绍,本文主要介绍Web API Routing。 如果你已经熟悉 ASP.NET MVC,你会发现 Web API Routi
张善友
2018/01/22
9740
快速配置Azure DevOps代理服务器
Azure DevOps非常好用,但是代理服务器的配置相对有点麻烦而且易出问题,接下来笔者分享一下如何快速配置Azure DevOps的代理服务器。值得注意的是,本文以CentOS 7为例,故在开始之前,请先准备好CentOS 7服务器。
雪雁-心莱科技
2020/09/17
1.2K0
快速配置Azure DevOps代理服务器
Contact Manager Web API 示例[2] Web API Routing
联系人管理器web API是一个Asp.net web api示例程序,演示了通过ASP.NET Web API 公开联系信息,并允许您添加和删除联系人,示例地址http://code.msdn.microsoft.com/Contact-Manager-Web-API-0e8e373d。 Contact Manager Web API 示例[1]CRUD 操作 已经做了一个基本的介绍,本文主要介绍Web API Routing。 如果你已经熟悉 ASP.NET MVC,你会发现 Web API Routi
张善友
2018/01/22
1K0

相似问题

添加水平轴标签- VBA Excel

31

在excel中添加每个系列的水平轴

11

Excel vba -更改系列范围内的行数和轴标签

132

Excel VBA设置轴标签

123

VBA Excel在图表上设置水平轴

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文