mirror of
https://github.com/jsvine/pdfplumber.git
synced 2026-08-29 08:34:23 +08:00
761 lines
83 KiB
Plaintext
761 lines
83 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": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:11.831307Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:11.830748Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:11.878550Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:11.878056Z"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"0.7.2\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import pdfplumber\n",
|
|
"import re\n",
|
|
"print(pdfplumber.__version__)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Load the PDF"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:11.881175Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:11.880980Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:11.885376Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:11.884973Z"
|
|
}
|
|
},
|
|
"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": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:11.887599Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:11.887439Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:11.893031Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:11.892668Z"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"p0 = pdf.pages[0]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:11.895107Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:11.894947Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:12.056270Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:12.055956Z"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<pdfplumber.display.PageImage at 0x103d46890>"
|
|
]
|
|
},
|
|
"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": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:12.057987Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:12.057873Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:12.171592Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:12.171324Z"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxgAAAJkCAYAAACS6odqAAARZklEQVR4nO3dUY7yyAFG0XLEnmZPLIg9zaoqDxHpREkbaC71u+GcJ2Shz/M06jtjXNuccw4AAIDAP/70PwAAAPA+BAYAAJARGAAAQEZgAAAAGYEBAABkBAYAAJARGAAAQEZgAAAAGYEBAABkBAYAAJARGAAAQEZgAAAAGYEBAABkBAYAAJARGAAAQEZgAAAAGYEBAABkBAYAAJARGAAAQEZgAAAAGYEBAABkBAYAAJARGAAAQEZgAAAAGYEBAABkBAYAAJARGAAAQEZgAAAAGYEBAABkBAYAAJARGAAAQEZgAAAAmdOSu2zb30vuA/BbzPnXn/5HAIBXWBMYY4xtzPP18xzb5da1e77zzDX79u3b/9P7APCOPCIFAABkBAYAAJARGAAAQEZgAAAAGYEBAABktjnnfP1dvKYW4L94TS0Ab2rZa2oB+A/+wwvwG/mPI9zBORj27du3b9++ffv2774Gt/gNBgAAkBEYAABARmAAAAAZgQEAAGQEBgAAkHEOBgAA9/GaWu7gHAwA+HT+aARCzsGwb9++ffv27QNk/AYDAADICAwAACAjMAAAgIzAAAAAMgIDAADIOAcDAD6d19QCoTWBAQAAfASPSAEAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQOS25i4P2AIB34WBC2LUmMMYY25jn6+c5tsuta/d855lr9u3bt2/fvn37P90HvucRKQAAICMwAACAjMAAAAAyAgMAAMgIDAAAILPNOefr7+I1tQDAm/CaWtjl/2AAAAAZ52DYt2/fvn379u0/uA98z//BAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMs7BAAB4hHMwYNey19RCyr/cAQAOyTkY9n/tPgAAx+M3GAAAQEZgAAAAGYEBAABkBAYAAJARGAAAQMY5GPxOXlMLAHBIawIDAAD4CB6RAgAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACBzWnIXB+0BAPwuDrXlh9YExhhjG/N8/TzHdrl17Z7vPHPNvn379u3bt2/f/v41+AmPSAEAABmBAQAAZAQGAACQERgAAEBGYAAAAJltzjlffxevqQUA+FW8ppYf8n8wAACAjHMw7Nu3b9++ffv27f/fa/AT/g8GAACQERgAAEBGYAAAABmBAQAAZAQGAACQcQ4GAAD/yzkY/NCy19QCwFP8sQPwKzgHw759+/bt/5p9AI7PbzAAAICMwAAAADICAwAAyAgMAAAgIzAAAICMczAA+B28phbgV3AOBgC/w5H/Y5X4Afg352DYt2/fvn37wTUA/sVvMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIxzMADgWV5TC/BvawIDAAD4CB6RAgAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACBzWnIXB+0BAByXwyIJrQmMMcY25vn6eY7tcuvaPd955pp9+/bt27dv3779r2tQ8YgUAACQERgAAEBGYAAAABmBAQAAZAQGAACQ2eac8/V38ZpaAIDD8ppaQsteUwsAb8EfYgC7nINh3759+/btP3gNgO/5DQYAAJARGAAAQEZgAAAAGYEBAABkBAYAAJBxDgYAPMJragF2rQkMAADgI3hECgAAyAgMAAAgIzAAAICMwAAAADICAwAAyAgMAAAgIzAAAIDMacldHLQHAHBcDpAktCYwxhjbmOfr5zm2y61r93znmWv27du3b9++ffv2v65BxSNSAABARmAAAAAZgQEAAGQEBgAAkBEYAABAZptzztffxWtqAQAOy2tqCS17TS0AvAV/iAHscg6Gffv27du3/+A1AL7nNxgAAEBGYAAAABmBAQAAZAQGAACQERgAAEDGORgA8AivqQXYtSYwAACAj+ARKQAAICMwAACAjMAAAAAyAgMAAMgIDAAAICMwAACAjMAAAAAypyV3cdAeAMBxOUCS0JrAGGNsY56vn+fYLreu3fOdZ67Zt2/fvn379u3b/7oGFY9IAQAAGYEBAABkBAYAAJARGAAAQEZgAAAAmW3OOV9/F6+pBQA4LK+pJbTsNbUA8Bb8IQawyzkY9u3bt2/f/oPXAPie32AAAAAZgQEAAGQEBgAAkBEYAABARmAAAAAZ52AAwCO8phZg15rAAAAAPoJHpAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADInJbcxUF7AADH5QBJQmsCY4yxjXm+fp5ju9y6ds93nrlm3759+/bt27dv/+saVDwiBQAAZAQGAACQERgAAEBGYAAAABmBAQAAZLY553z9XbymFgDgsLymltCy19QCwFvwhxjALudg2Ldv3759+w9eA+B7foMBAABkBAYAAJARGAAAQEZgAAAAGYEBAABknIMBAI/wmlqAXWsCAwAA+AgekQIAADICAwAAyAgMAAAgIzAAAICMwAAAADICAwAAyAgMAAAgc1pyFwftAQAclwMkCa0JjDHGNub5+nmO7XLr2j3feeaaffv27du3b9++/a9rUPGIFAAAkBEYAABARmAAAAAZgQEAAGQEBgAAkNnmnPP1d/GaWgCAw/KaWkLLXlMLAG/BH2IAu5yDYd++ffv27T94DYDv+Q0GAACQERgAAEBGYAAAABmBAQAAZAQGAACQcQ4GADzCa2oBdq0JDAAA4CN4RAoAAMgIDAAAICMwAACAjMAAAAAyAgMAAMgIDAAAICMwAACAzGnJXRy0BwBwXA6QJLQmMMYY25jn6+c5tsuta/d855lr9u3bt2/fvn379r+uQcUjUgAAQEZgAAAAGYEBAABkBAYAAJARGAAAQGabc87X38VragEADstragkte00tALwFf4gB7HIOhn379u3bt//gNQC+5zcYAABARmAAAAAZgQEAAGQEBgAAkBEYAABAxjkYAPAIr6kF2LUmMAAAgI/gESkAACAjMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMqcld3HQHgDAcTlAktCawBhjbGOer5/n2C63rt3znWeu2bdv3759+/bt2/+6BhWPSAEAABmBAQAAZAQGAACQERgAAEBGYAAAAJltzjlffxevqQUAOCyvqSW07DW1APAW/CEGsMs5GPbt27dv3/6D1wD4nt9gAAAAGYEBAABkBAYAAJARGAAAQEZgAAAAGedgAMAjvKYWYNeawAAAAD6CR6QAAICMwAAAADICAwAAyAgMAAAgIzAAAICMwAAAADICAwAAyJyW3MVBewAAx+UASUJrAmOMsY15vn6eY7vcunbPd565Zt++ffv27du3b//rGlQ8IgUAAGQEBgAAkBEYAABARmAAAAAZgQEAAGS2Oed8/V28phYA4LC8ppbQstfUAsBb8IcYwC7nYNi3b9++ffsPXgPge36DAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZJyDAQCP8JpagF1rAgMAAPgIHpECAAAyAgMAAMgIDAAAICMwAACAjMAAAAAyAgMAAMgIDAAAIHNachcH7QEAHJcDJAmtCYwxxjbm+fp5ju1y69o933nmmn379u3bt2/fvv2va1DxiBQAAJARGAAAQEZgAAAAGYEBAABkBAYAAJDZ5pzz9XfxmloAgMPymlpCy15TCwBvwR9iALucg2Hfvn379u0/eA2A7/kNBgAAkBEYAABARmAAAAAZgQEAAGQEBgAAkHEOBgA8wmtqAXatCQwAAOAjeEQKAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgMxpyV0ctAcAcFwOkCS0JjDGGNuY5+vnObbLrWv3fOeZa/bt27dv3759+/a/rkHFI1IAAEBGYAAAABmBAQAAZAQGAACQERgAAEBmm3PO19/Fa2oBAA7La2oJLXtNLQC8BX+IAexyDoZ9+/bt27f/4DUAvuc3GAAAQEZgAAAAGYEBAABkBAYAAJARGAAAQMY5GADwCK+pBdi1JjAAAICP4BEpAAAgIzAAAICMwAAAADICAwAAyAgMAAAgIzAAAICMwAAAADKnJXdx0B4AwHE5QJLQmsAYY2xjnq+f59gut67d851nrtm3b9++ffv27dv/ugYVj0gBAAAZgQEAAGQEBgAAkBEYAABARmAAAACZbc45X38Xr6kFADgsr6kltOw1tQDwFvwhBrDLORj27du3b9/+g9cA+J7fYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABnnYADAI7ymFmDXmsAAAAA+gkekAACAjMAAAAAyAgMAAMgIDAAAICMwAACAjMAAAAAyAgMAAMicltzFQXsAAMflAElCawJjjLGNeb5+nmO73Lp2z3eeuWbfvn379u3bt2//6xpUPCIFAABkBAYAAJARGAAAQEZgAAAAGYEBAABktjnnfP1dvKYWAOCwvKaW0LLX1ALAW/CHGMAu52DYt2/fvn37D14D4Ht+gwEAAGQEBgAAkBEYAABARmAAAAAZgQEAAGScgwEAj/CaWoBdawIDAAD4CB6RAgAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACAjMAAAgIzAAAAAMgIDAADICAwAACBzWnKXbft7yX0AAHidOf/60/8IHN+awBhjbGOer5/n2C63rt3znWeu2bdv3759+/bt23/8GtziESkAACAjMAAAgIzAAAAAMgIDAADICAwAACCzzTnn6+/iNbUAAL+e19RyhzWBAQAAfASPSAEAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZAQGAACQERgAAEBGYAAAABmBAQAAZP4JjALUCxkXwMQAAAAASUVORK5CYII=\n",
|
|
"text/plain": [
|
|
"<pdfplumber.display.PageImage at 0x103d46890>"
|
|
]
|
|
},
|
|
"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": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:12.173168Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:12.173064Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:12.176635Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:12.176383Z"
|
|
}
|
|
},
|
|
"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": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:12.178094Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:12.178003Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:12.179820Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:12.179585Z"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"core_pat = re.compile(r\"LOCATION[\\-\\s]+(.*)\\n\\s+Flags = e\", re.DOTALL)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:12.181222Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:12.181137Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:12.182649Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:12.182405Z"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"core = re.search(core_pat, text).group(1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:12.184036Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:12.183958Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:12.185616Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:12.185373Z"
|
|
}
|
|
},
|
|
"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": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:12.187052Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:12.186947Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:12.188815Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:12.188586Z"
|
|
}
|
|
},
|
|
"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": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:12.190227Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:12.190130Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:12.192688Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:12.192416Z"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def parse_row(first_line, second_line):\n",
|
|
" return {\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": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:12.194113Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:12.194010Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:12.195651Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:12.195414Z"
|
|
}
|
|
},
|
|
"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": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:12.197128Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:12.197029Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:12.199323Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:12.199086Z"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[{'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",
|
|
" {'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": {
|
|
"execution": {
|
|
"iopub.execute_input": "2022-07-18T02:49:12.200773Z",
|
|
"iopub.status.busy": "2022-07-18T02:49:12.200669Z",
|
|
"iopub.status.idle": "2022-07-18T02:49:12.428250Z",
|
|
"shell.execute_reply": "2022-07-18T02:49:12.421787Z"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\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": {},
|
|
"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.10.4"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|