如何在 tabula-py 中设置页面范围?
How to make page range in tabula-py?
在 Python 3 中,我有一个 PDF 文件 "Ativos_Fevereiro_2018_servidores.pdf" 有 6,041 页。我在 Ubuntu 的机器上。文件在这里:https://drive.google.com/file/d/1P8kF0gUOVls6sOGed4R0C2PlVF5RFtU6/view?usp=sharing
在每一页的顶部都有文字,两行。在 table 下方,带有 header 和两列。每行table36行,少了最后一页
在每一页的末尾,在table之后,还有一行文字
我想从这个 PDF 创建一个 CSV,只考虑页面中的 tables。并忽略 tables
前后的文本
为了避免 java-memory 错误,我想将文件分成 300 页一组。我在 tabula-py:
这样做了
import tabula
import pandas as pd
dfs = []
for i in range(1,6041, 300):
if i != 1:
i = i + 1
i2 = i + 300
if i2 > 6041:
i2 = 6041
print(i)
print(i2)
try:
df = tabula.read_pdf("Ativos_Fevereiro_2018.pdf", encoding='latin-1', spreadsheet=True, pages='i-i2', header=0)
dfs.append(df)
print('Page ', len(df), ' parsed.')
except:
print('Error on page: ', i)
output = pd.concat(dfs)
output.to_csv('servidores_rj_ativos_fev_18.csv', encoding='utf-8', index=False)
但是我做的范围是错误的:
1
301
Error: Syntax error in page range specification
Error on page: 1
302
602
...
Error: Syntax error in page range specification
Error on page: 5702
6002
6041
Error: Syntax error in page range specification
Error on page: 6002
Traceback (most recent call last):
File "roboseguranca_pdftocsv.py", line 26, in <module>
output = pd.concat(dfs)
File "/home/reinaldo/Documentos/Code/intercept/seguranca/lib/python3.6/site-packages/pandas/core/reshape/concat.py", line 212, in concat
copy=copy)
File "/home/reinaldo/Documentos/Code/intercept/seguranca/lib/python3.6/site-packages/pandas/core/reshape/concat.py", line 245, in __init__
raise ValueError('No objects to concatenate')
ValueError: No objects to concatenate
请问如何更正范围错误?
要使范围起作用,您必须将其作为字符串传递,因此将整数转换为字符串并将它们与“-”组合:
pages=(str(i)+'-'+str(i2))
其他一些事情:
- 在
tabula.read_pdf
语句中也使用 encoding='utf-8'
- 如果您还想查看抛出的错误,请扩展
except
语句,例如:
except Exception as e:
print('Error in range ', i, '-', 'i2: ', e)
- 如果仍然是 Java 错误(tabula 使用 java 进行解析),您可以添加一些
java_options='something...'
(参见 https://github.com/tabulapdf/tabula-java/blob/master/README.md)
- 我没有遇到任何问题 运行 使用 python 2.7 / Java 1.8(在 64GB RAM 机器上)一次所有 6041 页
在 Python 3 中,我有一个 PDF 文件 "Ativos_Fevereiro_2018_servidores.pdf" 有 6,041 页。我在 Ubuntu 的机器上。文件在这里:https://drive.google.com/file/d/1P8kF0gUOVls6sOGed4R0C2PlVF5RFtU6/view?usp=sharing
在每一页的顶部都有文字,两行。在 table 下方,带有 header 和两列。每行table36行,少了最后一页
在每一页的末尾,在table之后,还有一行文字
我想从这个 PDF 创建一个 CSV,只考虑页面中的 tables。并忽略 tables
前后的文本为了避免 java-memory 错误,我想将文件分成 300 页一组。我在 tabula-py:
这样做了import tabula
import pandas as pd
dfs = []
for i in range(1,6041, 300):
if i != 1:
i = i + 1
i2 = i + 300
if i2 > 6041:
i2 = 6041
print(i)
print(i2)
try:
df = tabula.read_pdf("Ativos_Fevereiro_2018.pdf", encoding='latin-1', spreadsheet=True, pages='i-i2', header=0)
dfs.append(df)
print('Page ', len(df), ' parsed.')
except:
print('Error on page: ', i)
output = pd.concat(dfs)
output.to_csv('servidores_rj_ativos_fev_18.csv', encoding='utf-8', index=False)
但是我做的范围是错误的:
1
301
Error: Syntax error in page range specification
Error on page: 1
302
602
...
Error: Syntax error in page range specification
Error on page: 5702
6002
6041
Error: Syntax error in page range specification
Error on page: 6002
Traceback (most recent call last):
File "roboseguranca_pdftocsv.py", line 26, in <module>
output = pd.concat(dfs)
File "/home/reinaldo/Documentos/Code/intercept/seguranca/lib/python3.6/site-packages/pandas/core/reshape/concat.py", line 212, in concat
copy=copy)
File "/home/reinaldo/Documentos/Code/intercept/seguranca/lib/python3.6/site-packages/pandas/core/reshape/concat.py", line 245, in __init__
raise ValueError('No objects to concatenate')
ValueError: No objects to concatenate
请问如何更正范围错误?
要使范围起作用,您必须将其作为字符串传递,因此将整数转换为字符串并将它们与“-”组合:
pages=(str(i)+'-'+str(i2))
其他一些事情:
- 在
tabula.read_pdf
语句中也使用encoding='utf-8'
- 如果您还想查看抛出的错误,请扩展
except
语句,例如:
except Exception as e:
print('Error in range ', i, '-', 'i2: ', e)
- 如果仍然是 Java 错误(tabula 使用 java 进行解析),您可以添加一些
java_options='something...'
(参见 https://github.com/tabulapdf/tabula-java/blob/master/README.md) - 我没有遇到任何问题 运行 使用 python 2.7 / Java 1.8(在 64GB RAM 机器上)一次所有 6041 页