PDF Странное поведение сантехника. Два одинаковых PDF-файла: 1 работает, 1 не работает.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 PDF Странное поведение сантехника. Два одинаковых PDF-файла: 1 работает, 1 не работает.

Сообщение Anonymous »

У меня есть два PDF-файла, которые выглядят одинаково, и я хочу извлечь данные с помощью этой функции:

Код: Выделить всё

all_data = []

with pdfplumber.open(pdf_path) as pdf:
for page in pdf.pages:
table = page.extract_table()
if table:
filtered_table = table[5:]  # Salta le intestazioni
header = [clean_text(h) for h in filtered_table[0]]  # Pulisci l'intestazione
data = filtered_table[1:]

# Rimuovi righe vuote dalla tabella
data = [row for row in data if any(cell and cell.strip() for cell in row)]

# Appendi i dati della pagina all'elenco
all_data.extend(data)

if not all_data:

return

df = pd.DataFrame(all_data, columns=header)
df.dropna(how='all', inplace=True)
Когда я пытаюсь извлечь данные, этот код работает только для одного PDF-файла. Я открыл оба PDF-файла в Visual Studio Code, и в первых строках они выглядят по-разному.
Тот, который работает:

Код: Выделить всё

%PDF-1.7
%����
7 0 obj
>
stream
Тот, который не работает:

Код: Выделить всё

%PDF-1.7
%����
1 0 obj

endobj
2 0 obj

endobj
3 0 obj

endobj
4 0 obj

endobj
5 0 obj

stream
Мне нужно записать данные в Excel, и когда я записываю данные из второго PDF-файла, между данными в Excel появляется много двоичного кода.
Я экспортировал оба PDF-файла из Excel, знаю, это странно, но мне это нужно не просто так
Мне нужно, чтобы оба PDF-файла читались правильно.

Обновление
настоящая проблема - это функция сопоставления, потому что я пытался распечатать то, что прочитал pdfplumber, и это правильно, но когда он пишет, он пишет много двоичного кода внутри Excel

Код: Выделить всё

def apply_mapping(text):
for key, value in data_mapping.items():
if key in text:
return value
return text

for col in df.columns:
df[col] = df[col].apply(lambda x: apply_mapping(clean_text(str(x))) if x is not None else "")
Когда я его вызываю, он не работает. Он возвращает следующее предупреждение о будущем:

FutureWarning: Series.__getitem__ обработка ключей как позиций устарела. В будущей версии целочисленные ключи всегда будут рассматриваться как метки (в соответствии с поведением DataFrame). Чтобы получить доступ к значению по позиции, используйте ser.iloc[pos]

df[col] = df[col].apply(lambda x: apply_mapping(clean_text(str(x)) ), если x не равен None else "")


Подробнее здесь: https://stackoverflow.com/questions/789 ... 1-doesnt-w
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»