mirror of
https://github.com/jsvine/pdfplumber.git
synced 2026-08-29 08:34:23 +08:00
701 lines
84 KiB
Plaintext
701 lines
84 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Parsing San Jose PD's firearm search reports\n",
|
|
"\n",
|
|
"This example uses `pdfplumber`'s visual debugging and text-extraction features to parse a fixed-width table embedded in a PDF. Thanks to [Ron Campbell](https://twitter.com/campbellronaldw) for the sample PDF."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {
|
|
"collapsed": true,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import pdfplumber\n",
|
|
"import re\n",
|
|
"from collections import OrderedDict"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Load the PDF"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"pdf = pdfplumber.open(\"../pdfs/san-jose-pd-firearm-sample.pdf\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Examine the first page"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {
|
|
"collapsed": true,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"p0 = pdf.pages[0]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\nw/Mon8J84ofGSOoZi9GsOlY73fe/4nLnR+y2slGKZNsvmu8h8512cr1mQvBnE069C5f24KJGh+R0\ntP/wSsfu93vn+nJDe22iu2yRli2WvCj/WpA3KnBdvK9/r6t22e5DPj9fpimL8jy6FvviihWpUxZ1\nO9O10kGah9rucOoo22JkqC5PPbxUrNc2Vyfb3JW4bouI38d+GHPmylx/hfuoQ5z3WsoLFv1obr+5\n1PjLRb8yt+f5zLVedvsVvA3tBHcweUmC31DJQCSQAgBY5GZzAIBFAikAgEUCKQCARQIpAIBFAikA\ngEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBF\nAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIp\nAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCA\nRQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUC\nKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikA\ngEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBF\nAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIp\nAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCA\nRQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUC\nKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikA\ngEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBF\nAikAgEUCKQCARQIpAIBFAikAgEUCKQCARQIpAIBFAikAgEUCKQCARf8XnbhHs95OO5wAAAAASUVO\nRK5CYII=\n",
|
|
"text/plain": [
|
|
"<pdfplumber.display.PageImage at 0x1113d28d0>"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"im = p0.to_image()\n",
|
|
"im"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## See where the characters are on the page\n",
|
|
"\n",
|
|
"Below, we draw rectangles around each of the `char` objects that `pdfplumber` detected. By doing so, we can see that every line of the main part of the report is the same width, and that there are space (`\" \"`) characters padding out each field. That means we can parse those lines a lot like we'd parse a standard fixed-width data file."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\nAAB0giMFAAAA0AmOFAAAAEAnOFIAAAAAneBIAQAAAHSCIwUAAADQCY4UAAAAQCc4UgAAAACd4EgB\nAAAAdIIjBQAAANAJjhQAAABAJzhSAAAAAJ3gSAEAAAB0giMFAAAA0AmOFAAAAEAnOFIAAAAAneBI\nAQAAAHSCIwUAAADQCY4UAAAAQCc4UgAAAACd4EgBAAAAdIIjBQAAANAJjhQAAABAJzhSAAAAAJ3g\nSAEAAAB0giMFAAAA0AmOFAAAAEAnOFIAAAAAneBIAQAAAHSCIwUAAADQCY4UAAAAQCc4UgAAAACd\n4EgBAAAAdIIjBQAAANAJjhQAAABAJzhSAAAAAJ3gSAEAAAB0giMFAAAA0AmOFAAAAEAnOFIAAAAA\nneBIAQAAAHSCIwUAAADQCY4UAAAAQCc4UgAAAACd4EgBAAAAdIIjBQAAANAJjhQAAABAJzhSAAAA\nAJ3gSAEAAAB0giMFAAAA0AmOFAAAAEAnOFIAAAAAneBIAQAAAHSCIwUAAADQCY4UAAAAQCc4UgAA\nAACd4EgBAAAAdIIjBQAAANAJjhQAAABAJzhSAAAAAJ3gSAEAAAB0giMFAAAA0AmOFAAAAEAnOFIA\nAAAAneBIAQAAAHSCIwUAAADQCY4UAAAAQCc4UgAAAACd4EgBAAAAdIIjBQAAANAJjhQAAABAJzhS\nAAAAAJ3gSAEAAAB0giMFAAAA0AmOFAAAAEAnOFIAAAAAneBIAQAAAHSCIwUAAADQCY4UAAAAQCc4\nUgAAAACd4EgBAAAAdIIjBQAAANAJjhQAAABAJzhSAAAAAJ3gSAEAAAB0giMFAAAA0AmOFAAAAEAn\nOFIAAAAAneBIAQAAAHSCIwUAAADQCY4UAAAAQCc4UgAAAACd4EgBAAAAdIIjBQAAANAJjhQAAABA\nJzhSAAAAAJ3gSAEAAAB0giMFAAAA0AmOFAAAAEAnOFIAAAAAneBIAQAAAHSCIwUAAADQCY4UAAAA\nQCc4UgAAAACd4EgBAAAAdIIjBQAAANAJjhQAAABAJzhSAAAAAJ3gSAEAAAB0giMFAAAA0AmOFAAA\nAEAn/w9llXnQ4h80IwAAAABJRU5ErkJggg==\n",
|
|
"text/plain": [
|
|
"<pdfplumber.display.PageImage at 0x1113d28d0>"
|
|
]
|
|
},
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"im.reset().draw_rects(p0.chars)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Extract the text from the PDF\n",
|
|
"\n",
|
|
"Using the `Page.extract_text(...)` method, we grab every character on the page, line by line:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"For:1094N \n",
|
|
"Page 1 SAN JOSE POLICE DEPT Date Report Run : Tue, May-24-16\n",
|
|
" FIREARM SEARCH \n",
|
|
"SEARCH CRITERIA: fi_property.item_status='B' and fi_property.entry_date between '07/01/2012' and '05/24/2016' and fi_p\n",
|
|
" roperty.jurisdiction='SJ' \n",
|
|
"NUMBER OF RECORDS RETURNED: 983\n",
|
|
"TYPE ITEM MAKE MODEL CALIBRE STATUS FLAGS\n",
|
|
"-------------------- -------------------- --------------------------------------------- --------------- ------- -------- -----\n",
|
|
"SERIAL NUMBER REPORT/TAG NUMBER CASE/FILE NUMBER STORAGE LOCATION\n",
|
|
"------------- ------------------- -------------------- ----------------------- \n",
|
|
"PISTOL REVOLVER UNKWN/UNPUBLSHD MAKE UNKNOWN 38 FOUND _d__\n",
|
|
"1721 Tag#:SJ3095-1 GO SJ 2012-122590518 WA-GR/GUN DESTRUCTION \n",
|
|
"SHOTGUN DOUBLE BARREL STEVEN/J STVNS ARMS 311 SERIES H 12GA FOUND _d__\n",
|
|
"REMOVED Tag#:SJ3123-1 GO SJ 2012-122620320 WA-GR/GUN DESTRUCTION \n",
|
|
"PISTOL SEMI-AUTOMATIC TAURUS FORJAS PT40 PRO MIL'NU 40 FOUND _d__\n",
|
|
"SZH77919 Tag#:SJ3360-1 GO SJ 2012-122670386 WA-GR/GUN DESTRUCTION/G\n",
|
|
"PISTOL SEMI-AUTOMATIC SMITH AND WESSON 39 9MM FOUND _d__\n",
|
|
"85517 Tag#:SJ3686-1 GO SJ 2012-122741016 WA-GR/GUN DESTRUCTION/G\n",
|
|
"PISTOL SEMI-AUTOMATIC HIGH POINT JCP 40 FOUND ____\n",
|
|
"REMOVED Tag#:SJ3724-1 GO SJ 2012-122750582 WA-GR/GUN DESTRUCTION/G\n",
|
|
"PISTOL REVOLVER COLT DETECTIVE SPEC 38 FOUND _d__\n",
|
|
"982982 Tag#:SJ4077-2 GO SJ 2012-122840637 WA-GR/GUN DESTRUCTION/Z\n",
|
|
"SHOTGUN DOUBLE BARREL MISS.VALLEY ARMS CO. UNK 12GA FOUND _d__\n",
|
|
"279861 Tag#:SJ4117-1 GO SJ 2012-122850220 WA-GR/GUN DESTRUCTION \n",
|
|
"RIFLE LEVER ACTION SEARS ROEBUCK & CO. 5 22 FOUND _d__\n",
|
|
"63723 Tag#:SJ4172-1 GO SJ 2012-122860208 WA-GR/GUN DESTRUCTION \n",
|
|
"PISTOL SEMI-AUTOMATIC COLT MATCH TARGET .22 FOUND _d__\n",
|
|
"142061S Tag#:SJ4324-1 GO SJ 2012-122890285 WA-GR/GD-SCCCL \n",
|
|
"PISTOL REVOLVER SMITH AND WESSON UNKNOWN .22 FOUND _d__\n",
|
|
"K22539 Tag#:SJ4324-2 GO SJ 2012-122890285 WA-GR/GUN DESTRUCTION \n",
|
|
"RIFLE LEVER ACTION STEVEN/J STVNS ARMS CRACK SHOT 26 .22 FOUND _d__\n",
|
|
"UNKNOWN Tag#:SJ4324-3 GO SJ 2012-122890285 WA-GR/GUN DESTRUCTION \n",
|
|
"PISTOL SEMI-AUTOMATIC CARL WALTHER PPK 7.65 FOUND _d__\n",
|
|
"832229 Tag#:SJ4664-1 GO SJ 2012-122960284 WA-GR/GD-SCCCL \n",
|
|
" Flags = e (evidence) d (disposed) x (x-reference) n (entered on NCIC)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"text = p0.extract_text()\n",
|
|
"print(text)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Stripping away the header and footer\n",
|
|
"\n",
|
|
"In this step, we use a regular expression to focus on the core part of the page — the table."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"core_pat = re.compile(r\"LOCATION[\\-\\s]+(.*)\\n\\s+Flags = e\", re.DOTALL)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"core = re.search(core_pat, text).group(1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"PISTOL REVOLVER UNKWN/UNPUBLSHD MAKE UNKNOWN 38 FOUND _d__\n",
|
|
"1721 Tag#:SJ3095-1 GO SJ 2012-122590518 WA-GR/GUN DESTRUCTION \n",
|
|
"SHOTGUN DOUBLE BARREL STEVEN/J STVNS ARMS 311 SERIES H 12GA FOUND _d__\n",
|
|
"REMOVED Tag#:SJ3123-1 GO SJ 2012-122620320 WA-GR/GUN DESTRUCTION \n",
|
|
"PISTOL SEMI-AUTOMATIC TAURUS FORJAS PT40 PRO MIL'NU 40 FOUND _d__\n",
|
|
"SZH77919 Tag#:SJ3360-1 GO SJ 2012-122670386 WA-GR/GUN DESTRUCTION/G\n",
|
|
"PISTOL SEMI-AUTOMATIC SMITH AND WESSON 39 9MM FOUND _d__\n",
|
|
"85517 Tag#:SJ3686-1 GO SJ 2012-122741016 WA-GR/GUN DESTRUCTION/G\n",
|
|
"PISTOL SEMI-AUTOMATIC HIGH POINT JCP 40 FOUND ____\n",
|
|
"REMOVED Tag#:SJ3724-1 GO SJ 2012-122750582 WA-GR/GUN DESTRUCTION/G\n",
|
|
"PISTOL REVOLVER COLT DETECTIVE SPEC 38 FOUND _d__\n",
|
|
"982982 Tag#:SJ4077-2 GO SJ 2012-122840637 WA-GR/GUN DESTRUCTION/Z\n",
|
|
"SHOTGUN DOUBLE BARREL MISS.VALLEY ARMS CO. UNK 12GA FOUND _d__\n",
|
|
"279861 Tag#:SJ4117-1 GO SJ 2012-122850220 WA-GR/GUN DESTRUCTION \n",
|
|
"RIFLE LEVER ACTION SEARS ROEBUCK & CO. 5 22 FOUND _d__\n",
|
|
"63723 Tag#:SJ4172-1 GO SJ 2012-122860208 WA-GR/GUN DESTRUCTION \n",
|
|
"PISTOL SEMI-AUTOMATIC COLT MATCH TARGET .22 FOUND _d__\n",
|
|
"142061S Tag#:SJ4324-1 GO SJ 2012-122890285 WA-GR/GD-SCCCL \n",
|
|
"PISTOL REVOLVER SMITH AND WESSON UNKNOWN .22 FOUND _d__\n",
|
|
"K22539 Tag#:SJ4324-2 GO SJ 2012-122890285 WA-GR/GUN DESTRUCTION \n",
|
|
"RIFLE LEVER ACTION STEVEN/J STVNS ARMS CRACK SHOT 26 .22 FOUND _d__\n",
|
|
"UNKNOWN Tag#:SJ4324-3 GO SJ 2012-122890285 WA-GR/GUN DESTRUCTION \n",
|
|
"PISTOL SEMI-AUTOMATIC CARL WALTHER PPK 7.65 FOUND _d__\n",
|
|
"832229 Tag#:SJ4664-1 GO SJ 2012-122960284 WA-GR/GD-SCCCL \n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(core)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Parse each group of two lines\n",
|
|
"\n",
|
|
"In the report, each firearm takes up two lines. The code below splits the core table into two-line groups, and then parses out the fields, based on the number of characters in each field:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"('PISTOL REVOLVER UNKWN/UNPUBLSHD MAKE UNKNOWN 38 FOUND _d__', '1721 Tag#:SJ3095-1 GO SJ 2012-122590518 WA-GR/GUN DESTRUCTION ')\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"lines = core.split(\"\\n\")\n",
|
|
"line_groups = list(zip(lines[::2], lines[1::2]))\n",
|
|
"print(line_groups[0])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {
|
|
"collapsed": true,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def parse_row(first_line, second_line):\n",
|
|
" return OrderedDict([\n",
|
|
" (\"type\", first_line[:20].strip()),\n",
|
|
" (\"item\", first_line[21:41].strip()),\n",
|
|
" (\"make\", first_line[44:89].strip()),\n",
|
|
" (\"model\", first_line[90:105].strip()),\n",
|
|
" (\"calibre\", first_line[106:111].strip()),\n",
|
|
" (\"status\", first_line[112:120].strip()),\n",
|
|
" (\"flags\", first_line[124:129].strip()),\n",
|
|
" (\"serial_number\", second_line[0:13].strip()),\n",
|
|
" (\"report_tag_number\", second_line[21:41].strip()),\n",
|
|
" (\"case_file_number\", second_line[44:64].strip()),\n",
|
|
" (\"storage_location\", second_line[68:91].strip())\n",
|
|
" ])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"parsed = [ parse_row(first_line, second_line) \n",
|
|
" for first_line, second_line in line_groups ]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Result\n",
|
|
"\n",
|
|
"Below, you can see the parsed data for the first two firearms in the report:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[OrderedDict([('type', 'PISTOL'),\n",
|
|
" ('item', 'REVOLVER'),\n",
|
|
" ('make', 'UNKWN/UNPUBLSHD MAKE'),\n",
|
|
" ('model', 'UNKNOWN'),\n",
|
|
" ('calibre', '38'),\n",
|
|
" ('status', 'FOUND'),\n",
|
|
" ('flags', '_d__'),\n",
|
|
" ('serial_number', '1721'),\n",
|
|
" ('report_tag_number', 'Tag#:SJ3095-1'),\n",
|
|
" ('case_file_number', 'GO SJ 2012-1225905'),\n",
|
|
" ('storage_location', 'WA-GR/GUN DESTRUCTION')]),\n",
|
|
" OrderedDict([('type', 'SHOTGUN'),\n",
|
|
" ('item', 'DOUBLE BARREL'),\n",
|
|
" ('make', 'STEVEN/J STVNS ARMS'),\n",
|
|
" ('model', '311 SERIES H'),\n",
|
|
" ('calibre', '12GA'),\n",
|
|
" ('status', 'FOUND'),\n",
|
|
" ('flags', '_d__'),\n",
|
|
" ('serial_number', 'REMOVED'),\n",
|
|
" ('report_tag_number', 'Tag#:SJ3123-1'),\n",
|
|
" ('case_file_number', 'GO SJ 2012-1226203'),\n",
|
|
" ('storage_location', 'WA-GR/GUN DESTRUCTION')])]"
|
|
]
|
|
},
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"parsed[:2]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Preview via `pandas.DataFrame`\n",
|
|
"\n",
|
|
"To make it a little easier to read, here's the full table, parsed and represented as a `pandas.DataFrame` (for ease of viewing):"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {
|
|
"collapsed": false,
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>type</th>\n",
|
|
" <th>item</th>\n",
|
|
" <th>make</th>\n",
|
|
" <th>model</th>\n",
|
|
" <th>calibre</th>\n",
|
|
" <th>status</th>\n",
|
|
" <th>flags</th>\n",
|
|
" <th>serial_number</th>\n",
|
|
" <th>report_tag_number</th>\n",
|
|
" <th>case_file_number</th>\n",
|
|
" <th>storage_location</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>PISTOL</td>\n",
|
|
" <td>REVOLVER</td>\n",
|
|
" <td>UNKWN/UNPUBLSHD MAKE</td>\n",
|
|
" <td>UNKNOWN</td>\n",
|
|
" <td>38</td>\n",
|
|
" <td>FOUND</td>\n",
|
|
" <td>_d__</td>\n",
|
|
" <td>1721</td>\n",
|
|
" <td>Tag#:SJ3095-1</td>\n",
|
|
" <td>GO SJ 2012-1225905</td>\n",
|
|
" <td>WA-GR/GUN DESTRUCTION</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>SHOTGUN</td>\n",
|
|
" <td>DOUBLE BARREL</td>\n",
|
|
" <td>STEVEN/J STVNS ARMS</td>\n",
|
|
" <td>311 SERIES H</td>\n",
|
|
" <td>12GA</td>\n",
|
|
" <td>FOUND</td>\n",
|
|
" <td>_d__</td>\n",
|
|
" <td>REMOVED</td>\n",
|
|
" <td>Tag#:SJ3123-1</td>\n",
|
|
" <td>GO SJ 2012-1226203</td>\n",
|
|
" <td>WA-GR/GUN DESTRUCTION</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>PISTOL</td>\n",
|
|
" <td>SEMI-AUTOMATIC</td>\n",
|
|
" <td>TAURUS FORJAS</td>\n",
|
|
" <td>PT40 PRO MIL'NU</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>FOUND</td>\n",
|
|
" <td>_d__</td>\n",
|
|
" <td>SZH77919</td>\n",
|
|
" <td>Tag#:SJ3360-1</td>\n",
|
|
" <td>GO SJ 2012-1226703</td>\n",
|
|
" <td>WA-GR/GUN DESTRUCTION/G</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>PISTOL</td>\n",
|
|
" <td>SEMI-AUTOMATIC</td>\n",
|
|
" <td>SMITH AND WESSON</td>\n",
|
|
" <td>39</td>\n",
|
|
" <td>9MM</td>\n",
|
|
" <td>FOUND</td>\n",
|
|
" <td>_d__</td>\n",
|
|
" <td>85517</td>\n",
|
|
" <td>Tag#:SJ3686-1</td>\n",
|
|
" <td>GO SJ 2012-1227410</td>\n",
|
|
" <td>WA-GR/GUN DESTRUCTION/G</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>PISTOL</td>\n",
|
|
" <td>SEMI-AUTOMATIC</td>\n",
|
|
" <td>HIGH POINT</td>\n",
|
|
" <td>JCP</td>\n",
|
|
" <td>40</td>\n",
|
|
" <td>FOUND</td>\n",
|
|
" <td>____</td>\n",
|
|
" <td>REMOVED</td>\n",
|
|
" <td>Tag#:SJ3724-1</td>\n",
|
|
" <td>GO SJ 2012-1227505</td>\n",
|
|
" <td>WA-GR/GUN DESTRUCTION/G</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>PISTOL</td>\n",
|
|
" <td>REVOLVER</td>\n",
|
|
" <td>COLT</td>\n",
|
|
" <td>DETECTIVE SPEC</td>\n",
|
|
" <td>38</td>\n",
|
|
" <td>FOUND</td>\n",
|
|
" <td>_d__</td>\n",
|
|
" <td>982982</td>\n",
|
|
" <td>Tag#:SJ4077-2</td>\n",
|
|
" <td>GO SJ 2012-1228406</td>\n",
|
|
" <td>WA-GR/GUN DESTRUCTION/Z</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>SHOTGUN</td>\n",
|
|
" <td>DOUBLE BARREL</td>\n",
|
|
" <td>MISS.VALLEY ARMS CO.</td>\n",
|
|
" <td>UNK</td>\n",
|
|
" <td>12GA</td>\n",
|
|
" <td>FOUND</td>\n",
|
|
" <td>_d__</td>\n",
|
|
" <td>279861</td>\n",
|
|
" <td>Tag#:SJ4117-1</td>\n",
|
|
" <td>GO SJ 2012-1228502</td>\n",
|
|
" <td>WA-GR/GUN DESTRUCTION</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>RIFLE</td>\n",
|
|
" <td>LEVER ACTION</td>\n",
|
|
" <td>SEARS ROEBUCK & CO.</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>22</td>\n",
|
|
" <td>FOUND</td>\n",
|
|
" <td>_d__</td>\n",
|
|
" <td>63723</td>\n",
|
|
" <td>Tag#:SJ4172-1</td>\n",
|
|
" <td>GO SJ 2012-1228602</td>\n",
|
|
" <td>WA-GR/GUN DESTRUCTION</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>PISTOL</td>\n",
|
|
" <td>SEMI-AUTOMATIC</td>\n",
|
|
" <td>COLT</td>\n",
|
|
" <td>MATCH TARGET</td>\n",
|
|
" <td>.22</td>\n",
|
|
" <td>FOUND</td>\n",
|
|
" <td>_d__</td>\n",
|
|
" <td>142061S</td>\n",
|
|
" <td>Tag#:SJ4324-1</td>\n",
|
|
" <td>GO SJ 2012-1228902</td>\n",
|
|
" <td>WA-GR/GD-SCCCL</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>9</th>\n",
|
|
" <td>PISTOL</td>\n",
|
|
" <td>REVOLVER</td>\n",
|
|
" <td>SMITH AND WESSON</td>\n",
|
|
" <td>UNKNOWN</td>\n",
|
|
" <td>.22</td>\n",
|
|
" <td>FOUND</td>\n",
|
|
" <td>_d__</td>\n",
|
|
" <td>K22539</td>\n",
|
|
" <td>Tag#:SJ4324-2</td>\n",
|
|
" <td>GO SJ 2012-1228902</td>\n",
|
|
" <td>WA-GR/GUN DESTRUCTION</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>10</th>\n",
|
|
" <td>RIFLE</td>\n",
|
|
" <td>LEVER ACTION</td>\n",
|
|
" <td>STEVEN/J STVNS ARMS</td>\n",
|
|
" <td>CRACK SHOT 26</td>\n",
|
|
" <td>.22</td>\n",
|
|
" <td>FOUND</td>\n",
|
|
" <td>_d__</td>\n",
|
|
" <td>UNKNOWN</td>\n",
|
|
" <td>Tag#:SJ4324-3</td>\n",
|
|
" <td>GO SJ 2012-1228902</td>\n",
|
|
" <td>WA-GR/GUN DESTRUCTION</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>11</th>\n",
|
|
" <td>PISTOL</td>\n",
|
|
" <td>SEMI-AUTOMATIC</td>\n",
|
|
" <td>CARL WALTHER</td>\n",
|
|
" <td>PPK</td>\n",
|
|
" <td>7.65</td>\n",
|
|
" <td>FOUND</td>\n",
|
|
" <td>_d__</td>\n",
|
|
" <td>832229</td>\n",
|
|
" <td>Tag#:SJ4664-1</td>\n",
|
|
" <td>GO SJ 2012-1229602</td>\n",
|
|
" <td>WA-GR/GD-SCCCL</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" type item make model calibre \\\n",
|
|
"0 PISTOL REVOLVER UNKWN/UNPUBLSHD MAKE UNKNOWN 38 \n",
|
|
"1 SHOTGUN DOUBLE BARREL STEVEN/J STVNS ARMS 311 SERIES H 12GA \n",
|
|
"2 PISTOL SEMI-AUTOMATIC TAURUS FORJAS PT40 PRO MIL'NU 40 \n",
|
|
"3 PISTOL SEMI-AUTOMATIC SMITH AND WESSON 39 9MM \n",
|
|
"4 PISTOL SEMI-AUTOMATIC HIGH POINT JCP 40 \n",
|
|
"5 PISTOL REVOLVER COLT DETECTIVE SPEC 38 \n",
|
|
"6 SHOTGUN DOUBLE BARREL MISS.VALLEY ARMS CO. UNK 12GA \n",
|
|
"7 RIFLE LEVER ACTION SEARS ROEBUCK & CO. 5 22 \n",
|
|
"8 PISTOL SEMI-AUTOMATIC COLT MATCH TARGET .22 \n",
|
|
"9 PISTOL REVOLVER SMITH AND WESSON UNKNOWN .22 \n",
|
|
"10 RIFLE LEVER ACTION STEVEN/J STVNS ARMS CRACK SHOT 26 .22 \n",
|
|
"11 PISTOL SEMI-AUTOMATIC CARL WALTHER PPK 7.65 \n",
|
|
"\n",
|
|
" status flags serial_number report_tag_number case_file_number \\\n",
|
|
"0 FOUND _d__ 1721 Tag#:SJ3095-1 GO SJ 2012-1225905 \n",
|
|
"1 FOUND _d__ REMOVED Tag#:SJ3123-1 GO SJ 2012-1226203 \n",
|
|
"2 FOUND _d__ SZH77919 Tag#:SJ3360-1 GO SJ 2012-1226703 \n",
|
|
"3 FOUND _d__ 85517 Tag#:SJ3686-1 GO SJ 2012-1227410 \n",
|
|
"4 FOUND ____ REMOVED Tag#:SJ3724-1 GO SJ 2012-1227505 \n",
|
|
"5 FOUND _d__ 982982 Tag#:SJ4077-2 GO SJ 2012-1228406 \n",
|
|
"6 FOUND _d__ 279861 Tag#:SJ4117-1 GO SJ 2012-1228502 \n",
|
|
"7 FOUND _d__ 63723 Tag#:SJ4172-1 GO SJ 2012-1228602 \n",
|
|
"8 FOUND _d__ 142061S Tag#:SJ4324-1 GO SJ 2012-1228902 \n",
|
|
"9 FOUND _d__ K22539 Tag#:SJ4324-2 GO SJ 2012-1228902 \n",
|
|
"10 FOUND _d__ UNKNOWN Tag#:SJ4324-3 GO SJ 2012-1228902 \n",
|
|
"11 FOUND _d__ 832229 Tag#:SJ4664-1 GO SJ 2012-1229602 \n",
|
|
"\n",
|
|
" storage_location \n",
|
|
"0 WA-GR/GUN DESTRUCTION \n",
|
|
"1 WA-GR/GUN DESTRUCTION \n",
|
|
"2 WA-GR/GUN DESTRUCTION/G \n",
|
|
"3 WA-GR/GUN DESTRUCTION/G \n",
|
|
"4 WA-GR/GUN DESTRUCTION/G \n",
|
|
"5 WA-GR/GUN DESTRUCTION/Z \n",
|
|
"6 WA-GR/GUN DESTRUCTION \n",
|
|
"7 WA-GR/GUN DESTRUCTION \n",
|
|
"8 WA-GR/GD-SCCCL \n",
|
|
"9 WA-GR/GUN DESTRUCTION \n",
|
|
"10 WA-GR/GUN DESTRUCTION \n",
|
|
"11 WA-GR/GD-SCCCL "
|
|
]
|
|
},
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"import pandas as pd\n",
|
|
"columns = list(parsed[0].keys())\n",
|
|
"pd.DataFrame(parsed)[columns]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"deletable": true,
|
|
"editable": true
|
|
},
|
|
"source": [
|
|
"---\n",
|
|
"\n",
|
|
"---\n",
|
|
"\n",
|
|
"---"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.4.3"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|