У меня есть несколько страниц счетов-фактур в формате PDF нестандартного формата. Взамен мне нужен файл Excel с данными, извлеченными из файлов PDF. Для этого я пишу код с библиотекой водопроводчика PDF на Python, но могу правильно использовать регулярное выражение для чтения и извлечения данных. Это связано с неправильным форматом.
Я хочу имя_области, дату, транзакцию, № товара, описание, упаковку, ставку, количество, бонус, валовую сумму, скидку, продажи, чистую сумму налога. все эти столбцы в Excel с пропущенными значениями равны нулю. Изображение Excel прилагается для обзора. Введите описание изображения здесь, это файл https://github.com/HananWali/Ak-pharma.git
import re
import requests
import pdfplumber
import pandas as pd
from collections import namedtuple
with pdfplumber.open('AK PHARMA (1).pdf') as pdf:
page = pdf.pages[19]
text = page.extract_text()
Inv = namedtuple('Inv', 'area_name date_p Tran prd_inv prd_des pack rate QTY Bonus Gross Dis Net_Am')
#new_vend_re = re.compile(r'(\b[A-Z]\d{1} [A-Z].*)')
#new_vend_re = re.compile(r'([A-Za-z0-9\s]+)')
#new_vend_re = re.compile(r'[A-Za-z0-9\s]+ (Hospital|Clinic|DHQ|S\d{1,2})', re.IGNORECASE)
#new_vend_re = re.compile(r'\b(?:S\d{1,2}\s)?[A-Za-z]+(?:\s[A-Za-z]+)?\s(?:Station|Hospital|DHQ|[A-Za-z]+)\b', re.IGNORECASE)
new_vend_re = re.compile(r'\b(Chichawatni|Harrapa|Kasowal|Mianchannu|Malka Hans|Gogera|Qabula|Arif Wala|Sahiwal|90 Morh|S1 High Street|S2 Mission Chowk|S3 DHQ Hospital|S4 Farid Town|S5 Jahaz Ground|S7 Karbala Road|S7 Mazdoor Puli|S8 TBZ Colony)\b', re.IGNORECASE)
#new_vend_re = re.compile(r'\d+ \d+ - [A-Za-z\s]+ \([A-Za-z\s]+\)')
for line in text.split('\n'):
if new_vend_re.match(line):
print(line)
area_name = line
print(area_name)
pattren = re.compile(r'(\d{2}-[A-Za-z]{3}-\d{4})\s+(Sale|Return)?\s*(\S+[-\S]+)\s+([A-Za-z0-9\s]+)\s+(\d+[A-Za-z]+)\s+([\d\.]+)\s+(\d+)\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)')
lines = []
with pdfplumber.open('AK PHARMA (1).pdf') as pdf:
for page in pdf.pages:
text = page.extract_text()
area_name = None
for line in text.split('\n'):
# Check if line matches area name pattern
temp = new_vend_re.search(line)
if temp : # Capture area name once per page
area_name = temp.group(0)
print("Area Name:", area_name)
continue
# Check if line matches the invoice details pattern
line_match = pattren.search(line)
if line_match and area_name:
date_p = line_match.group(0) # Invoice date
Tran = line_match.group(1) # Transaction type (Sale/Return)
prd_inv = line_match.group(2) # Product invoice
prd_des = line_match.group(3) # Product description
pack = line_match.group(4) # Package type
rate = line_match.group(5) # Rate
QTY = line_match.group(6) # Quantity
Bonus = line_match.group(7) # Bonus
Gross = line_match.group(8) # Gross amount
Dis = line_match.group(9) # Discount
Net_Am = line_match.group(10) # Net Amount
# Append each entry as an Inv object
lines.append(Inv(area_name, date_p, Tran, prd_inv, prd_des, pack, rate, QTY, Bonus, Gross, Dis, Net_Am))
`
# Print results in a more readable format
for inv in lines:
print(inv)
df = pd.DataFrame(lines)
df.head()
df.to_csv('inv_lines.csv')``
Подробнее здесь: https://stackoverflow.com/questions/791 ... sfer-in-ex
Столкновение с неправильным форматом при извлечении данных из счета-фактуры в формате PDF для передачи в файл Excel ⇐ Python
Программы на Python
1730991840
Anonymous
У меня есть несколько страниц счетов-фактур в формате PDF нестандартного формата. Взамен мне нужен файл Excel с данными, извлеченными из файлов PDF. Для этого я пишу код с библиотекой водопроводчика PDF на Python, но могу правильно использовать регулярное выражение для чтения и извлечения данных. Это связано с неправильным форматом.
Я хочу имя_области, дату, транзакцию, № товара, описание, упаковку, ставку, количество, бонус, валовую сумму, скидку, продажи, чистую сумму налога. все эти столбцы в Excel с пропущенными значениями равны нулю. Изображение Excel прилагается для обзора. Введите описание изображения здесь, это файл https://github.com/HananWali/Ak-pharma.git
import re
import requests
import pdfplumber
import pandas as pd
from collections import namedtuple
with pdfplumber.open('AK PHARMA (1).pdf') as pdf:
page = pdf.pages[19]
text = page.extract_text()
Inv = namedtuple('Inv', 'area_name date_p Tran prd_inv prd_des pack rate QTY Bonus Gross Dis Net_Am')
#new_vend_re = re.compile(r'(\b[A-Z]\d{1} [A-Z].*)')
#new_vend_re = re.compile(r'([A-Za-z0-9\s]+)')
#new_vend_re = re.compile(r'[A-Za-z0-9\s]+ (Hospital|Clinic|DHQ|S\d{1,2})', re.IGNORECASE)
#new_vend_re = re.compile(r'\b(?:S\d{1,2}\s)?[A-Za-z]+(?:\s[A-Za-z]+)?\s(?:Station|Hospital|DHQ|[A-Za-z]+)\b', re.IGNORECASE)
new_vend_re = re.compile(r'\b(Chichawatni|Harrapa|Kasowal|Mianchannu|Malka Hans|Gogera|Qabula|Arif Wala|Sahiwal|90 Morh|S1 High Street|S2 Mission Chowk|S3 DHQ Hospital|S4 Farid Town|S5 Jahaz Ground|S7 Karbala Road|S7 Mazdoor Puli|S8 TBZ Colony)\b', re.IGNORECASE)
#new_vend_re = re.compile(r'\d+ \d+ - [A-Za-z\s]+ \([A-Za-z\s]+\)')
for line in text.split('\n'):
if new_vend_re.match(line):
print(line)
area_name = line
print(area_name)
pattren = re.compile(r'(\d{2}-[A-Za-z]{3}-\d{4})\s+(Sale|Return)?\s*(\S+[-\S]+)\s+([A-Za-z0-9\s]+)\s+(\d+[A-Za-z]+)\s+([\d\.]+)\s+(\d+)\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)')
lines = []
with pdfplumber.open('AK PHARMA (1).pdf') as pdf:
for page in pdf.pages:
text = page.extract_text()
area_name = None
for line in text.split('\n'):
# Check if line matches area name pattern
temp = new_vend_re.search(line)
if temp : # Capture area name once per page
area_name = temp.group(0)
print("Area Name:", area_name)
continue
# Check if line matches the invoice details pattern
line_match = pattren.search(line)
if line_match and area_name:
date_p = line_match.group(0) # Invoice date
Tran = line_match.group(1) # Transaction type (Sale/Return)
prd_inv = line_match.group(2) # Product invoice
prd_des = line_match.group(3) # Product description
pack = line_match.group(4) # Package type
rate = line_match.group(5) # Rate
QTY = line_match.group(6) # Quantity
Bonus = line_match.group(7) # Bonus
Gross = line_match.group(8) # Gross amount
Dis = line_match.group(9) # Discount
Net_Am = line_match.group(10) # Net Amount
# Append each entry as an Inv object
lines.append(Inv(area_name, date_p, Tran, prd_inv, prd_des, pack, rate, QTY, Bonus, Gross, Dis, Net_Am))
`
# Print results in a more readable format
for inv in lines:
print(inv)
df = pd.DataFrame(lines)
df.head()
df.to_csv('inv_lines.csv')``
Подробнее здесь: [url]https://stackoverflow.com/questions/79167031/facing-irregular-format-while-extracting-data-from-pdf-invoice-to-transfer-in-ex[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия