So in [last week's post](https://peakd.com/hive-169321/@coderad/how-i-saved-100s-of-hours-of-work-for-a-local-company-using-python-and-python-docx-n00b-friendly-part-12) we got our hands on our word documents and then wrote a Python script to extract the data we need from each one. We used that data to build us a folder of .csv files corresponding to each document with the pared-down data inside. Quick and easy, and now we have all our fire alarm system device information in files with the address of the building or complex or facility (as the filename) in a *fraction* of the amount of time it would have taken to compile the information manually. And we didn't blow anything up! Trust me you do not want the fire department called, there's so much more paperwork surrounding that as I've learned from this gig.  <sub>*Souce: KlingAI*</sub> <br> # Getting Started .CSVs in hand, it's time to integrate the data into the new reports! This essentially the reverse of the first part with a twist; we're still scanning for tables and iterating through them, we're just pasting the new data instead of copying old data. As always, we start with our imports, which will be the same as in *FetchData.py*, with one addition: ```` import os import docx import csv import math ```` We have **os** for file system and **docx** and **csv** for working with *docx* and *csv* files. We added **math** for access to the *ceiling* function, which we'll be using later on to calculate the number of pages we need for our output report. # Finding our Target Table With our original source sheets, the only tables in there were ones that contained the data we need. In our new integrated report, the fire alarm devices start on page 13. So we're going to need a unique marker, something that differentiates our table from the other dozen tables that we don't care about. A quick scan of the report template shows that our table says "Device Location" in the top left cell, and none of the other tables do, so there's our hook! We're also going to be dealing with multiple tables eventually, so we'll support that as well: ```` def find_device_tables(doc): tables = [] for table in doc.tables: if table.rows and table.rows[0].cells and table.rows[0].cells[0].text.strip() == "Device Location": tables.append(table) return tables ```` What are we up to here? - We're **def**ining a function called *find_device_tables* that takes a docx as input - We're declaring an empty array for our *table IDs* - We're looking at each table in the template to see if it matches our reference string in cell 0,0 - We're adding that ID to our list of *table IDs* Now we have a nice list of table IDs that we can use to place our data once we load it from the csv. # Building the Templates Our new report template only has space for 20 records. This part of the report lists all the fire protection devices that need to be checked, like smoke alarms, fire extinguishers and fire alarm pull stations. You know, the things that you're not supposed to pull as a joke, ever, and which Kling has apparently never heard of.  <sub>*Souce: KlingAI*</sub> On small jobs, 20 might be fine but when you get into a big building like a school or hospital or mall, there could be dozens, if not hundreds. My first thought was to basically just find the blank table and then programmatically copy it and create a new page with another copy of the table and repeat for however many times we need to hold all our records for each site. But when I actually tried it out, I had a lot of difficulty getting the styles to carry over. I could create lots of new tables, but the formatting was a mess. The vertically aligned legend, the background cell colors, the column widths. I tried a couple approaches but I quickly realized that it was going to be much faster to just actually manually create multiple report templates where each template already had the right amount of pages available. Easy! I created a new folder called */templates* and then saved the original template as t0020.docx. Then I copied my template page, pasted it, saved it as t0040.docx. (Then t0060, t0080, t0100 etc). Three inputs each: **CTRL-V** (Paste), **F12** (Save As), and change one digit. Then repeat, adding a page each time with a new name. Could I have automated this? Certainly, but the fact is it took all of 20 minutes to manually generate the reports with support for up to 1200 devices. It would have taken at least that long to brew a coffee and articulate the problem. A fun exercise, maybe, but a little overkill for this one-time task. Lets do up a quick function to pick our template: ```` def get_template_for_row_count(row_count): template_size = math.ceil(row_count / 20) * 20 # Round up to nearest 20 return f"./templates/t{str(template_size).zfill(4)}.docx" ```` We're using *ceiling* from **math** here to quickly round our row count (which we will grab from the .csv file) to the nearest 20, and return the actual template name, *ie. t0120.docx* to the function that's going to build a new file. # Performing the Merge This is a longer function, but that's okay. No one will ever look at your code, unless you blog about it or something similarly silly. We'll break it up a little here. We start with **def**ining our merge function and loading up the .csv, dumping the data into a list. We'll call our new *get_template_for_row_count* function to select our template. If the template doesn't exist, then that's fine -- it tells us how many rows we need so we can cobble together the appropriate template afterwards and run it again. In the end I needed to make a few of these like t2150 and t3060 for particularly unique sites, which is fine. ```` def merge_data(csv_path, output_path): # Read CSV data with open(csv_path, newline='', encoding="utf-8") as csvfile: reader = csv.reader(csvfile) data_rows = list(reader) row_count = len(data_rows) template_path = get_template_for_row_count(row_count) if not template_path or not os.path.exists(template_path): print(f"Error: No suitable template found for {csv_path} ({row_count} rows).") return ```` Now that we've selected our template, we can load it and use our first *find_device_tables* function to find our tables: ```` # Load the Word template doc = docx.Document(template_path) tables = find_device_tables(doc) ```` We insert our csv data: ``` # Insert data into tables row_index = 0 for table in tables: for i in range(1, len(table.rows)): # Skip header row if row_index >= row_count: break # Stop when all data is inserted cells = table.rows[i].cells cells[0].text = data_rows[row_index][0] # Location is Column 0 cells[2].text = data_rows[row_index][1] # Device is Column 2 cells[4].text = data_rows[row_index][2] # Circuit is Column 4 row_index += 1 if row_index >= row_count: break # Stop when all data is inserted if row_index < row_count: print(f"Warning: Not all data was inserted for {csv_path} (ran out of table space).") ``` And finally set the filename and save it, and delete the original csv: ``` # Generate output filename new_filename = os.path.basename(csv_path).replace("Device Data.csv", "Fire Alarm Report.docx") output_file = os.path.join(output_path, new_filename) # Save the modified report doc.save(output_file) print(f"Merged: {csv_path} -> {output_file}") # Delete CSV after successful merge os.remove(csv_path) print(f"Deleted: {csv_path}") ```` Why do we delete the csv? Mostly because this way we can easily look at our csv folder after we run our script. Any that are still there obviously need a little special attention; could be something with the filename, could be a missing report template. Just an easy way to tell at a glance what got skipped. And of course, we still have our source files so we can generate a new folder of .csv in no time flat if we want. # Finishing Up Now we just need to tie it all together! ```` def process_all_files(): input_folder = "./processed" output_folder = "./migrated" if not os.path.exists(output_folder): os.makedirs(output_folder) for filename in os.listdir(input_folder): if filename.endswith(".csv"): csv_path = os.path.join(input_folder, filename) merge_data(csv_path, output_folder) process_all_files() ```` All we have to do now is drop to the CLI and **python3 MergeData.py** and we're off to the races! Check our *processed* folder after, deal with any stragglers and Bob's your Uncle. I did some quick napkin math, and by my reckoning it would have taken them at least 160 man hours to pull this off manually. If they just had assistant assistants doing it for $20 an hour that would have been about $3200. Of course, they don't have assistant assistants there, so they would have had to use actual assistants as well as the actual account managers. So not only would it be far more in wages, it would have pulled those resources away from their real (and time-sensitive) jobs for the better part of two weeks. Since I was able to throw this together for less than a thousand bucks and put it together in a couple days, it was a massive win for everyone. And nobody had to call the fire department.  <sub>*Souce: KlingAI*</sub>
author | coderad | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
permlink | how-i-saved-100s-of-hours-of-work-for-a-local-company-using-python-and-python-docx-n00b-friendly-part-22 | ||||||||||||||||||||||||
category | hive-169321 | ||||||||||||||||||||||||
json_metadata | {"app":"peakd/2025.4.3","format":"markdown","image":["https://files.peakd.com/file/peakd-hive/coderad/23xVPNZSsdGZY9TANUEvAWSjUWtKMBqvLKpjxHBvZJXNxPs8vYJpbPF5FXRCnHtXjRAnD.png","https://files.peakd.com/file/peakd-hive/coderad/23ywyiTmf6fecAPaPf7TpGaqLFnxC29boPPQSjhatoem1tey96jiw8RboAC1v5NiWDMqe.png","https://files.peakd.com/file/peakd-hive/coderad/23zkw4ow2TjL4MB2jb2Ed7SATQCodWFKomES6cTZ3kQtbtSS163oEsK5tbx154HLMmh1P.png"],"tags":["programming","development","python","tutorial","docx","word","automation","csv","beginner","filesystem"],"users":["coderad"]} | ||||||||||||||||||||||||
created | 2025-04-10 21:43:45 | ||||||||||||||||||||||||
last_update | 2025-04-11 04:37:30 | ||||||||||||||||||||||||
depth | 0 | ||||||||||||||||||||||||
children | 8 | ||||||||||||||||||||||||
last_payout | 2025-04-17 21:43:45 | ||||||||||||||||||||||||
cashout_time | 1969-12-31 23:59:59 | ||||||||||||||||||||||||
total_payout_value | 37.458 HBD | ||||||||||||||||||||||||
curator_payout_value | 40.237 HBD | ||||||||||||||||||||||||
pending_payout_value | 0.000 HBD | ||||||||||||||||||||||||
promoted | 0.000 HBD | ||||||||||||||||||||||||
body_length | 9,952 | ||||||||||||||||||||||||
author_reputation | 18,083,391,714,930 | ||||||||||||||||||||||||
root_title | "How I saved 100s of hours of work for a local company using Python and python-docx (N00B Friendly) [Part 2/2]" | ||||||||||||||||||||||||
beneficiaries |
| ||||||||||||||||||||||||
max_accepted_payout | 1,000,000.000 HBD | ||||||||||||||||||||||||
percent_hbd | 10,000 | ||||||||||||||||||||||||
post_id | 142,027,579 | ||||||||||||||||||||||||
net_rshares | 252,831,923,797,340 | ||||||||||||||||||||||||
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
flemingfarm | 0 | 61,763,768,926 | 10% | ||
acidyo | 0 | 5,719,730,655,725 | 100% | ||
roelandp | 0 | 182,731,879,791 | 9.8% | ||
matt-a | 0 | 773,086,048 | 9.3% | ||
jacor | 0 | 7,701,657,323 | 14% | ||
jeffjagoe | 0 | 1,351,475,926 | 1.4% | ||
arcange | 0 | 547,241,490,510 | 5% | ||
fiveboringgames | 0 | 1,508,762,897 | 28% | ||
kaykunoichi | 0 | 1,085,488,544 | 50% | ||
ebargains | 0 | 7,356,772,609 | 26.6% | ||
lydon.sipe | 0 | 5,868,696,280 | 100% | ||
alexisvalera | 0 | 1,608,242,368 | 14% | ||
oleg326756 | 0 | 2,177,066,749 | 7% | ||
justinw | 0 | 44,480,065,251 | 8.77% | ||
walterjay | 0 | 217,031,012,803 | 8.4% | ||
askari | 0 | 5,137,285,935 | 28% | ||
amariespeaks | 0 | 1,313,180,745 | 10.64% | ||
torkot | 0 | 4,539,774,956 | 14% | ||
thereikiforest | 0 | 1,460,280,626 | 10% | ||
ranchorelaxo | 0 | 62,476,790,818,795 | 100% | ||
trafalgar | 0 | 54,897,634,999,791 | 100% | ||
ganjafarmer | 0 | 2,659,356,543 | 1.4% | ||
itinerantph | 0 | 1,902,671,978 | 50% | ||
detlev | 0 | 89,246,572,158 | 4.2% | ||
lizanomadsoul | 0 | 2,858,093,909 | 1.5% | ||
raindrop | 0 | 849,545,373,676 | 100% | ||
ma1neevent | 0 | 20,268,787,156 | 15% | ||
passion-fruit | 0 | 12,477,443,961 | 92% | ||
fortune-master | 0 | 12,231,153,472 | 92% | ||
batman0916 | 0 | 2,557,471,302 | 13.3% | ||
broncnutz | 0 | 7,852,034,118,520 | 100% | ||
clacrax | 0 | 709,885,244 | 14% | ||
rt395 | 0 | 2,073,713,385 | 2.5% | ||
newsflash | 0 | 3,287,672,377 | 21% | ||
carlagonz | 0 | 463,467,403 | 14% | ||
rawselectmusic | 0 | 5,644,498,991 | 14% | ||
juancar347 | 0 | 111,738,150,812 | 14% | ||
howtostartablog | 0 | 489,000,475 | 7.98% | ||
jayna | 0 | 42,535,966,216 | 5.6% | ||
joeyarnoldvn | 0 | 453,574,445 | 1.47% | ||
decomoescribir | 0 | 4,190,697,024 | 14% | ||
trenz | 0 | 542,971,772 | 10.08% | ||
bluemist | 0 | 25,814,834,916 | 10% | ||
diegoameerali | 0 | 1,525,583,432 | 8.4% | ||
davidfar | 0 | 583,964,069 | 14% | ||
dante31 | 0 | 465,267,834 | 14% | ||
nerengot | 0 | 464,966,305 | 14% | ||
haejin | 0 | 12,965,753,172,675 | 100% | ||
abnerpantoja | 0 | 1,344,576,642 | 14% | ||
appreciator | 0 | 37,392,987,638,362 | 10% | ||
owner99 | 0 | 958,932,552 | 14% | ||
ocd | 0 | 2,210,746,081,379 | 28% | ||
twoitguys | 0 | 8,841,047,910 | 25% | ||
pocketrocket | 0 | 8,859,430,557 | 100% | ||
kharrazi | 0 | 947,442,408 | 28% | ||
elinderzambrano | 0 | 589,954,012 | 14% | ||
redrica | 0 | 546,497,474 | 14.63% | ||
zyx066 | 0 | 9,596,530,197 | 8.4% | ||
etblink | 0 | 5,922,962,505 | 0.7% | ||
ridwant | 0 | 7,123,069,660 | 100% | ||
floatinglin | 0 | 7,966,920,094 | 100% | ||
niallon11 | 0 | 54,790,462,162 | 7% | ||
kaizag | 0 | 765,941,581 | 14% | ||
holbein81 | 0 | 534,238,362 | 100% | ||
aidefr | 0 | 564,821,559 | 2.6% | ||
estream.studios | 0 | 1,272,210,413 | 26.6% | ||
drax | 0 | 17,746,434,897 | 3.36% | ||
sorin.cristescu | 0 | 9,440,788,414 | 1.62% | ||
cesinfenianos | 0 | 1,330,115,009 | 14% | ||
jlsplatts | 0 | 26,143,082,862 | 2% | ||
marleyn | 0 | 659,340,128 | 14% | ||
dejan.vuckovic | 0 | 15,083,585,263 | 15% | ||
sunsea | 0 | 12,414,950,125 | 5% | ||
eonwarped | 0 | 19,627,530,792 | 8.4% | ||
emrebeyler | 0 | 201,765,594,157 | 2.8% | ||
traf | 0 | 4,737,586,151,039 | 100% | ||
iaberius | 0 | 723,606,461 | 14% | ||
robotics101 | 0 | 979,359,090 | 3.25% | ||
wiseagent | 0 | 182,121,601,235 | 15% | ||
tomatom | 0 | 2,842,939,525 | 14% | ||
juecoree | 0 | 1,313,645,330 | 14% | ||
carsonroscoe | 0 | 29,006,579,846 | 14% | ||
adncabrera | 0 | 812,543,820 | 4.2% | ||
azmielbanjary | 0 | 858,733,033 | 14% | ||
gabrielatravels | 0 | 21,829,273,374 | 11.2% | ||
gillianpearce | 0 | 31,440,183,667 | 100% | ||
oscarina | 0 | 737,961,888 | 10% | ||
dynamicrypto | 0 | 596,832,947 | 1% | ||
atongis | 0 | 33,770,857,216 | 10% | ||
debilog | 0 | 725,090,466 | 14% | ||
kkarenmp | 0 | 4,889,668,862 | 5% | ||
warpedpoetic | 0 | 745,021,619 | 13.3% | ||
ocd-witness | 0 | 478,712,379,129 | 28% | ||
madefrance | 0 | 6,591,639,936 | 14% | ||
rubelynmacion | 0 | 39,883,825,572 | 100% | ||
elektr1ker | 0 | 565,805,516 | 14% | ||
bertrayo | 0 | 7,878,232,798 | 5% | ||
lisfabian | 0 | 5,014,053,120 | 100% | ||
jguzman394 | 0 | 619,945,370 | 11.2% | ||
greendo | 0 | 457,937,917 | 28% | ||
ravenmus1c | 0 | 10,104,375,146 | 0.5% | ||
sanderjansenart | 0 | 58,649,321,634 | 28% | ||
louis88 | 0 | 632,745,933,970 | 20% | ||
zaku | 0 | 13,800,352,718 | 10% | ||
racibo | 0 | 1,821,745,293 | 1.4% | ||
inciter | 0 | 7,390,464,846 | 10% | ||
imcore | 0 | 864,113,859 | 10% | ||
achimmertens | 0 | 49,066,884,891 | 14% | ||
kgakakillerg | 0 | 21,691,960,585 | 10% | ||
ybf | 0 | 767,338,828 | 14% | ||
el-dee-are-es | 0 | 3,760,515,430 | 10% | ||
jotadiaz12 | 0 | 3,531,049,818 | 100% | ||
indigoocean | 0 | 6,989,386,803 | 14% | ||
city-of-berlin | 0 | 17,816,162,418 | 14% | ||
veteranforcrypto | 0 | 1,805,766,393 | 8.4% | ||
friendsofgondor | 0 | 98,163,397,352 | 26.6% | ||
steem.services | 0 | 26,352,818,740 | 26.6% | ||
nateaguila | 0 | 59,058,121,429 | 5% | ||
oscar21vander | 0 | 3,337,356,091 | 100% | ||
gmlgang | 0 | 476,151,031 | 88% | ||
corinadiaz | 0 | 784,100,316 | 13.3% | ||
kstop1 | 0 | 15,471,492,277 | 100% | ||
konradxxx3 | 0 | 1,549,069,281 | 14% | ||
purrix | 0 | 11,524,333,490 | 50% | ||
haccolong | 0 | 1,466,906,288 | 14% | ||
gaottantacinque | 0 | 0 | 100% | ||
talentclub | 0 | 17,073,347,374 | 14% | ||
xves | 0 | 20,158,787,088 | 50% | ||
diegopadilla | 0 | 528,744,331 | 14% | ||
ocdb | 0 | 48,526,394,942,548 | 26.6% | ||
rufruf | 0 | 745,487,058 | 100% | ||
ezunjoshy | 0 | 2,091,539,891 | 14% | ||
jesusmedit | 0 | 817,867,607 | 19.6% | ||
vicenteajb | 0 | 516,837,025 | 14% | ||
smartvote | 0 | 70,111,557,157 | 3.4% | ||
sarawutthai | 0 | 2,970,737,308 | 100% | ||
hoaithu | 0 | 2,595,217,322 | 11.9% | ||
lermagreen | 0 | 453,629,851 | 100% | ||
gasaeightyfive | 0 | 680,937,942 | 100% | ||
anhvu | 0 | 516,623,492 | 11.2% | ||
rayshiuimages | 0 | 1,132,320,457 | 14% | ||
pradeepdee6 | 0 | 97,176,486 | 11.2% | ||
javyeslava.photo | 0 | 4,023,222,587 | 16.8% | ||
marcocasario | 0 | 85,617,665,937 | 14.15% | ||
bdvoter | 0 | 4,186,735,766,946 | 6.65% | ||
cribbio | 0 | 2,480,151,937 | 100% | ||
artysteps | 0 | 21,278,982,161 | 100% | ||
miguelbaez | 0 | 1,238,501,876 | 10% | ||
multifacetas | 0 | 17,851,202,032 | 14% | ||
david.dicotomia | 0 | 1,594,227,043 | 10% | ||
variedades | 0 | 3,847,562,314 | 10.64% | ||
kennybobs | 0 | 1,345,558,385 | 26.6% | ||
jacuzzi | 0 | 1,614,268,813 | 3.5% | ||
goodcontentbot | 0 | 809,218,183 | 15% | ||
hozn4ukhlytriwc | 0 | 1,215,096,536 | 10% | ||
thelogicaldude | 0 | 1,974,845,685 | 5.6% | ||
kggymlife | 0 | 4,000,313,964 | 20% | ||
androshchuk | 0 | 503,470,107 | 14% | ||
alenox | 0 | 644,403,149 | 5% | ||
photographercr | 0 | 1,091,911,512 | 20% | ||
squareonefarms | 0 | 2,943,630,332 | 14% | ||
jishan5 | 0 | 472,039,218 | 14% | ||
bojan-bee | 0 | 457,027,556 | 14% | ||
beerlover | 0 | 5,260,946,027 | 4.2% | ||
qwerrie | 0 | 30,832,449,598 | 2.1% | ||
shookt | 0 | 1,386,070,598 | 14% | ||
kgswallet | 0 | 1,105,478,833 | 20% | ||
no-advice | 0 | 124,535,607,323 | 5% | ||
farm1 | 0 | 87,464,516,786 | 100% | ||
votebetting | 0 | 17,358,305,555 | 100% | ||
valerianis | 0 | 1,424,903,404 | 5% | ||
urun | 0 | 19,448,842,225 | 100% | ||
cageon360 | 0 | 1,141,545,290 | 13.3% | ||
gigel2 | 0 | 58,507,366,776 | 100% | ||
bilpcoin.pay | 0 | 547,045,045 | 10% | ||
kaeserotor | 0 | 3,718,321,871 | 19.59% | ||
darthsauron | 0 | 504,366,636 | 14% | ||
rus-lifestyle | 0 | 1,404,183,565 | 100% | ||
bpcvoter3 | 0 | 1,873,087,419 | 100% | ||
bilpcoinbpc | 0 | 509,504,643 | 3% | ||
keys-defender | 0 | 2,488,838,097 | 100% | ||
nerdvana | 0 | 1,950,906,852 | 14% | ||
dpend.active | 0 | 2,127,025,371 | 5.6% | ||
shinoxl | 0 | 16,188,515,303 | 100% | ||
hivebuzz | 0 | 9,213,045,539 | 3% | ||
laruche | 0 | 5,760,105,587 | 3.25% | ||
hivelist | 0 | 3,099,995,969 | 2.8% | ||
ninnu | 0 | 579,789,039 | 50% | ||
iameden | 0 | 1,251,587,882 | 14% | ||
ghaazi | 0 | 5,596,214,458 | 100% | ||
actioncats | 0 | 4,003,569,778 | 21.28% | ||
evelynchacin | 0 | 9,309,995,697 | 14% | ||
devpress | 0 | 603,049,353 | 50% | ||
noelyss | 0 | 2,054,507,983 | 5% | ||
balvinder294 | 0 | 2,492,582,011 | 20% | ||
sidjay | 0 | 702,440,522 | 14% | ||
lucianav | 0 | 1,759,862,800 | 5% | ||
hivebuilder | 0 | 4,815,149,713 | 100% | ||
gabilan55 | 0 | 2,208,414,051 | 14% | ||
olaunlimited | 0 | 614,639,063 | 45% | ||
perceval | 0 | 1,401,919,011 | 28% | ||
anafae | 0 | 2,092,106,654 | 2.8% | ||
scriptkittie | 0 | 1,997,589,649 | 28% | ||
sunitahive | 0 | 37,484,409,721 | 100% | ||
sylmarill | 0 | 885,177,578 | 100% | ||
kei2 | 0 | 768,558,325 | 14% | ||
trangbaby | 0 | 1,508,307,275 | 26.6% | ||
noalys | 0 | 1,685,951,283 | 5% | ||
paolazun | 0 | 1,754,474,705 | 14% | ||
danzocal | 0 | 5,519,434,432 | 100% | ||
lockedd | 0 | 867,360,945 | 14% | ||
kattycrochet | 0 | 7,491,386,310 | 5% | ||
dhedge | 0 | 30,132,249,948 | 5.6% | ||
hyper.speed | 0 | 3,010,279,740 | 100% | ||
meritocracy | 0 | 1,800,794,495,180 | 13.3% | ||
hiveart | 0 | 1,195,011,248 | 14% | ||
dcrops | 0 | 119,067,673,690 | 14% | ||
babeltrips | 0 | 6,680,836,917 | 13.3% | ||
cescajove | 0 | 4,329,542,830 | 14% | ||
solymi | 0 | 156,067,449,771 | 14% | ||
repayme4568 | 0 | 689,321,619 | 14% | ||
hive-152524 | 0 | 792,772,057 | 14% | ||
dodovietnam | 0 | 2,361,425,533 | 13.3% | ||
wend1go | 0 | 13,434,880,508 | 100% | ||
creodas | 0 | 608,145,734 | 19.95% | ||
cryptoniusrex | 0 | 35,601,330,580 | 100% | ||
rendrianarma | 0 | 2,335,325,890 | 50% | ||
phuongthao98 | 0 | 549,210,051 | 13.3% | ||
khushboo108 | 0 | 1,931,102,499 | 14% | ||
jane1289 | 0 | 174,557,462,147 | 75% | ||
cherryblossom20 | 0 | 734,380,360 | 14% | ||
hive-defender | 0 | 404,633,605 | 100% | ||
power-kappe | 0 | 680,028,634 | 10% | ||
soychalbed | 0 | 1,117,648,455 | 28% | ||
zenai | 0 | 509,244,479 | 14% | ||
reidenling90 | 0 | 7,512,657,305 | 100% | ||
key-defender.shh | 0 | 21,876,868 | 100% | ||
brujita18 | 0 | 5,385,056,362 | 14% | ||
egistar | 0 | 606,211,970 | 2.5% | ||
mariaser | 0 | 10,736,382,817 | 18.61% | ||
fotomaglys | 0 | 4,176,508,688 | 5% | ||
seryi13 | 0 | 952,071,806 | 7% | ||
iamchuks | 0 | 852,679,321 | 14% | ||
partiesjohall | 0 | 5,432,627,262 | 28% | ||
torrecoin90 | 0 | 21,595,252,437 | 100% | ||
jessicaossom | 0 | 2,945,242,720 | 14% | ||
josdelmi | 0 | 2,698,410,196 | 14% | ||
aprasad2325 | 0 | 5,058,384,978 | 13.3% | ||
nnurdiani | 0 | 1,981,379,249 | 100% | ||
koyel | 0 | 736,401,143 | 13.3% | ||
k5905200786 | 0 | 6,462,652,078 | 100% | ||
bobreza | 0 | 661,173,936 | 14% | ||
ivycrafts | 0 | 10,075,109,217 | 14% | ||
masterzarlyn28 | 0 | 635,091,804 | 14% | ||
thu172 | 0 | 654,246,608 | 26.6% | ||
bai123 | 0 | 952,909,846 | 14% | ||
wazza84 | 0 | 1,048,873,556 | 28% | ||
princekham | 0 | 96,143,831,329 | 14% | ||
antoniojg | 0 | 41,349,004,003 | 100% | ||
logen9f | 0 | 27,332,135,365 | 20% | ||
astrocat-3663 | 0 | 776,369,536 | 50% | ||
malhy | 0 | 1,760,304,564 | 5% | ||
poggersdude | 0 | 464,414,771 | 14% | ||
lynnnguyen | 0 | 2,140,465,759 | 26.6% | ||
kimloan | 0 | 2,091,374,216 | 13.3% | ||
winnietran | 0 | 1,050,265,101 | 13.3% | ||
eolianpariah2 | 0 | 18,141,941,792 | 4.5% | ||
dora381 | 0 | 10,156,960,903 | 26.6% | ||
matthew1 | 0 | 21,464,265,243 | 100% | ||
wharfagein | 0 | 130,376,080,434 | 99.8% | ||
sephiwolf | 0 | 1,664,710,434 | 25.2% | ||
nawalz | 0 | 468,893,429 | 14% | ||
tonton23 | 0 | 914,194,189 | 14% | ||
madame-cyntaia | 0 | 739,243,614 | 7.98% | ||
tillmea | 0 | 618,970,227 | 100% | ||
psyberx | 0 | 2,354,415,101 | 1% | ||
gaposchkin | 0 | 9,997,923,899 | 100% | ||
hyhy93 | 0 | 1,322,224,417 | 26.6% | ||
crypto-shots | 0 | 247,071,538 | 100% | ||
tristan.todd | 0 | 1,866,651,911 | 28% | ||
vickoly | 0 | 14,468,864,261 | 14% | ||
lamphuong | 0 | 457,480,341 | 13.3% | ||
deadleaf | 0 | 588,481,573 | 14% | ||
ivypham | 0 | 5,233,931,266 | 26.6% | ||
yelimarin | 0 | 17,969,995,816 | 100% | ||
lukasbachofner | 0 | 24,986,787,492 | 14% | ||
alex2alex | 0 | 674,192,800 | 5.32% | ||
anhdaden146 | 0 | 310,811,034,645 | 6.65% | ||
jerusa777 | 0 | 2,385,291,245 | 28% | ||
dlizara | 0 | 1,292,584,477 | 14% | ||
blockgolem | 0 | 459,356,134 | 28% | ||
jmis101 | 0 | 1,025,252,714 | 4.2% | ||
cryptoshots.nft | 0 | 1,285,402 | 100% | ||
pgm-curator | 0 | 5,740,478,672 | 14% | ||
franklinhart | 0 | 453,993,513 | 14% | ||
kilvnrex | 0 | 1,201,580,558 | 8.4% | ||
gamemapmaker | 0 | 673,742,376 | 28% | ||
browniegirl | 0 | 523,987,751 | 28% | ||
alejandroloreto | 0 | 511,802,692 | 14% | ||
aletoalonewolf | 0 | 1,195,558,045 | 14% | ||
creativepixie | 0 | 1,111,422,411 | 14% | ||
franzpaulie | 0 | 49,459,149,128 | 100% | ||
emreal | 0 | 1,074,691,280 | 14% | ||
lifeoflade | 0 | 429,146,684 | 14% | ||
castri-ja | 0 | 499,808,599 | 2.5% | ||
dutchchemist | 0 | 459,773,715 | 100% | ||
cryptoshots.play | 0 | 0 | 10% | ||
sommylove | 0 | 1,438,507,537 | 91% | ||
tzae | 0 | 730,611,131 | 100% | ||
justbekindtoday | 0 | 203,292,340,952 | 6% | ||
lyamalfonzo23 | 0 | 1,569,073,911 | 100% | ||
myegoandmyself | 0 | 162,825,179,795 | 8% | ||
cindynancy | 0 | 2,075,536,152 | 13.3% | ||
etselec23 | 0 | 667,022,574 | 14% | ||
deepspiral | 0 | 475,989,112 | 14% | ||
pinkchic | 0 | 854,299,041 | 2.5% | ||
cryptoshotsdoom | 0 | 0 | 10% | ||
fredaig | 0 | 1,309,904,628 | 11.2% | ||
artefactoestudio | 0 | 2,169,847,755 | 100% | ||
nhaji01 | 0 | 5,084,021,231 | 14% | ||
twosomesup | 0 | 5,313,545,932 | 13.3% | ||
minas-glory | 0 | 1,932,843,070 | 14% | ||
the-burn | 0 | 8,568,527,946 | 14% | ||
humbe | 0 | 7,165,297,501 | 2% | ||
agrante | 0 | 23,917,744,326 | 100% | ||
dresden.theone | 0 | 481,086,058 | 14% | ||
elnauta | 0 | 155,828,121 | 100% | ||
vlad26 | 0 | 459,405,932 | 14% | ||
catrynart | 0 | 1,344,205,055 | 14% | ||
bodrex27 | 0 | 659,958,709 | 21% | ||
egbre | 0 | 464,753,207 | 10% | ||
karina.gpt | 0 | 0 | 100% | ||
aunty-tosin | 0 | 1,762,271,139 | 14% | ||
tahastories1 | 0 | 561,052,665 | 5% | ||
javedkhan1989 | 0 | 547,052,134 | 5% | ||
richardoswal | 0 | 4,131,370,572 | 100% | ||
corneliusoke | 0 | 1,791,779,559 | 100% | ||
marilui91 | 0 | 19,572,018,983 | 100% | ||
criptovalor | 0 | 126,387,663 | 100% | ||
yummycruz1 | 0 | 974,904,834 | 5% | ||
alliebee | 0 | 744,000,665 | 50% | ||
chris-chris92 | 0 | 7,399,414,981 | 100% | ||
alto96 | 0 | 1,038,215,968 | 50% | ||
luisarrazola | 0 | 1,716,398,381 | 14% | ||
mulik369 | 0 | 1,145,798,680 | 14% | ||
blessskateshop | 0 | 811,211,551 | 14% | ||
bibana | 0 | 9,427,726,663 | 100% | ||
hive-156436 | 0 | 1,807,552,794 | 14% | ||
lolz.byte | 0 | 0 | 100% | ||
spellcatcher | 0 | 483,511,957 | 28% | ||
calebmarvel24 | 0 | 924,295,830 | 10% | ||
picazzy005 | 0 | 2,949,910,887 | 50% | ||
lilknas | 0 | 18,990,309,439 | 50.1% | ||
irandela | 0 | 489,718,197 | 28% | ||
lilkista | 0 | 507,698,357,532 | 50.1% | ||
franco10 | 0 | 2,323,395,562 | 14% | ||
kai-ermae | 0 | 773,815,707 | 8.4% | ||
lilkistb | 0 | 1,005,694,431,354 | 99.8% | ||
qurat-ul-ain | 0 | 800,715,304 | 10% | ||
imx.center | 0 | 6,984,388,620 | 28% | ||
kachy2022 | 0 | 15,033,349,477 | 100% | ||
sopel | 0 | 1,143,817,914,752 | 100% | ||
roswelborges | 0 | 16,008,671,731 | 100% | ||
nicolebanilad | 0 | 7,065,246,759 | 100% | ||
arshadkhan4421 | 0 | 1,415,161,071 | 50% | ||
magic.byte | 0 | 0 | 100% | ||
diostheduos | 0 | 0 | 0% | ||
coderad | 0 | 212,554,116 | 100% | ||
aftabirshad | 0 | 1,182,846,415 | 100% | ||
shadow302 | 0 | 673,147,128 | 30% |
Awesome work! Good work once again
author | aftabirshad | ||||||
---|---|---|---|---|---|---|---|
permlink | sujsbb | ||||||
category | hive-169321 | ||||||
json_metadata | {"app":"hiveblog/0.1"} | ||||||
created | 2025-04-11 09:42:39 | ||||||
last_update | 2025-04-11 09:42:39 | ||||||
depth | 1 | ||||||
children | 1 | ||||||
last_payout | 2025-04-18 09:42:39 | ||||||
cashout_time | 1969-12-31 23:59:59 | ||||||
total_payout_value | 0.000 HBD | ||||||
curator_payout_value | 0.000 HBD | ||||||
pending_payout_value | 0.000 HBD | ||||||
promoted | 0.000 HBD | ||||||
body_length | 34 | ||||||
author_reputation | 7,983,203,114,225 | ||||||
root_title | "How I saved 100s of hours of work for a local company using Python and python-docx (N00B Friendly) [Part 2/2]" | ||||||
beneficiaries |
| ||||||
max_accepted_payout | 1,000,000.000 HBD | ||||||
percent_hbd | 10,000 | ||||||
post_id | 142,034,825 | ||||||
net_rshares | 212,554,116 | ||||||
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
coderad | 0 | 212,554,116 | 100% |
thank you kindly my friend!
author | coderad |
---|---|
permlink | re-aftabirshad-suk3qx |
category | hive-169321 |
json_metadata | {"tags":["hive-169321"],"app":"peakd/2025.4.4"} |
created | 2025-04-11 13:49:45 |
last_update | 2025-04-11 13:49:45 |
depth | 2 |
children | 0 |
last_payout | 2025-04-18 13:49:45 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 27 |
author_reputation | 18,083,391,714,930 |
root_title | "How I saved 100s of hours of work for a local company using Python and python-docx (N00B Friendly) [Part 2/2]" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 142,038,157 |
net_rshares | 0 |
>Wow, love this post It’s been handpicked and curated by the awesome #Bilpcoin team—we’re so happy to support amazing content like this! If you’d like to join us in spreading the positivity, feel free to delegate some Hive Power to this account. Every bit helps us curate and uplift even more creators in the community By adding #bilpcoin or #bpc to original posts, you can earn BPC tokens https://hive.blog/hive-167922/@bpcvoter2/calling-all-music-artists-on-hive-elevate-your-sound-with-ai-infused-beats By adding #bilpcoin or #bpc to original posts, you can earn BPC tokens <a href="https://imgflip.com/i/9m7cuw"><img src="https://i.imgflip.com/9m7cuw.jpg" title="made at imgflip.com"/></a><div><a href="https://imgflip.com/memegenerator">from Imgflip Meme Generator</a></div> https://peakd.com/hive-140084/@bpcvoter1/my-way-keni-bpc-ai-music https://peakd.com/hive-126152/@bpcvoter2/dear-themarkymark-buildawhale-gogreenbuddy-usainvote-ipromote-and-whoever-else-is-involved-in-this-scheme-you-call-us-nutty-as https://peakd.com/hive-167922/@bilpcoinbpc/exploring-the-possibilities-of-ai-art-with-bilpcoin-nfts-episode-102-buildawhale-scam-farm-on-hive-and-dear-steevc https://peakd.com/hive-133987/@bilpcoinbpc/comprehensive-analysis-of-punkteam-s-wallet-transactions https://hive.blog/hive-163521/@bpcvoter1/deep-dive-into-meritocracy-s-activity-history-and-blockchain-audit https://www.publish0x.com/the-dark-side-of-hive/to-downvoters-scammers-and-farmers-on-hive-the-time-to-chang-xmjzrmp https://peakd.com/hive-163521/@bpcvoter3/themarkymark-we-ve-exposed-your-actions-repeatedly-how-you-and-your-army-of-bots-manipulate-rewards-to-benefit-yourselves-it-s https://peakd.com/hive-168088/@bpcvoter3/the-shadow-matrix-a-tale-of-deceit-and-reckoning https://youtu.be/5wEl6BaB2RM >**Our move?** 🔹 **Unite voices**: Use #bilpcoin or #bpc to highlight censorship & demand accountability. 🔹 **Document abuse**: Share evidence of unfair downvotes, self-voting scams, and double standards. 🔹 **Push for reform**: Advocate for transparent governance, vote caps, and community-driven rules. Decentralization isn’t just a feature—it’s a fight. Let’s model fairness, rally allies, and pressure Hive to live up to its ideals. **#StandForDecentralization #HiveTransparency**
author | bpcvoter3 |
---|---|
permlink | sujwvc |
category | hive-169321 |
json_metadata | {"tags":["bilpcoin","bpc","hivetransparency"],"image":["https://img.youtube.com/vi/5wEl6BaB2RM/0.jpg","https://i.imgflip.com/9m7cuw.jpg"],"links":["https://hive.blog/hive-167922/@bpcvoter2/calling-all-music-artists-on-hive-elevate-your-sound-with-ai-infused-beats"],"app":"hiveblog/0.1"} |
created | 2025-04-11 11:18:51 |
last_update | 2025-04-11 11:18:51 |
depth | 1 |
children | 0 |
last_payout | 2025-04-18 11:18:51 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 2,290 |
author_reputation | -6,579,703,250,067 |
root_title | "How I saved 100s of hours of work for a local company using Python and python-docx (N00B Friendly) [Part 2/2]" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 142,036,060 |
net_rshares | -5,286,895,793 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
spaminator | 0 | -5,286,895,793 | -0.25% | ||
bilpcoinbot1 | 0 | 0 | 100% |
!PIZZA
author | danzocal |
---|---|
permlink | re-coderad-sulpqt |
category | hive-169321 |
json_metadata | {"tags":["hive-169321"],"app":"peakd/2025.4.4","image":[],"users":[]} |
created | 2025-04-12 10:42:30 |
last_update | 2025-04-12 10:42:30 |
depth | 1 |
children | 0 |
last_payout | 2025-04-19 10:42:30 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 6 |
author_reputation | 12,432,803,008,396 |
root_title | "How I saved 100s of hours of work for a local company using Python and python-docx (N00B Friendly) [Part 2/2]" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 142,054,378 |
net_rshares | -10,475,199,911 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
spaminator | 0 | -5,282,083,065 | -0.25% | ||
meritocracy | 0 | -5,193,116,846 | -0.04% |
Congratulations @coderad! You have completed the following achievement on the Hive blockchain And have been rewarded with New badge(s) <table><tr><td><img src="https://images.hive.blog/60x70/https://hivebuzz.me/@coderad/upvoted.png?202504102349"></td><td>You received more than 1750 upvotes.<br>Your next target is to reach 2000 upvotes.</td></tr> </table> <sub>_You can view your badges on [your board](https://hivebuzz.me/@coderad) and compare yourself to others in the [Ranking](https://hivebuzz.me/ranking)_</sub> <sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>
author | hivebuzz |
---|---|
permlink | notify-1744329521 |
category | hive-169321 |
json_metadata | {"image":["https://hivebuzz.me/notify.t6.png"]} |
created | 2025-04-10 23:58:39 |
last_update | 2025-04-10 23:58:39 |
depth | 1 |
children | 0 |
last_payout | 2025-04-17 23:58:39 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 625 |
author_reputation | 369,386,340,709,685 |
root_title | "How I saved 100s of hours of work for a local company using Python and python-docx (N00B Friendly) [Part 2/2]" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 142,029,282 |
net_rshares | 0 |
Excellent information.
author | marilui91 |
---|---|
permlink | re-coderad-suk5po |
category | hive-169321 |
json_metadata | {"tags":["hive-169321"],"app":"peakd/2025.4.4","image":[],"users":[]} |
created | 2025-04-11 14:32:18 |
last_update | 2025-04-11 14:32:18 |
depth | 1 |
children | 1 |
last_payout | 2025-04-18 14:32:18 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 22 |
author_reputation | 36,891,153,945,224 |
root_title | "How I saved 100s of hours of work for a local company using Python and python-docx (N00B Friendly) [Part 2/2]" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 142,038,817 |
net_rshares | 209,578,503 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
coderad | 0 | 209,578,503 | 100% |
thank you! sometimes it's nice to see this stuff actually solving real-world problems, instead of making like the 1 millionth TODO List app haha
author | coderad |
---|---|
permlink | re-marilui91-suk6mm |
category | hive-169321 |
json_metadata | {"tags":["hive-169321"],"app":"peakd/2025.4.4","image":[],"users":[]} |
created | 2025-04-11 14:52:00 |
last_update | 2025-04-11 14:52:00 |
depth | 2 |
children | 0 |
last_payout | 2025-04-18 14:52:00 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 146 |
author_reputation | 18,083,391,714,930 |
root_title | "How I saved 100s of hours of work for a local company using Python and python-docx (N00B Friendly) [Part 2/2]" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 142,039,132 |
net_rshares | 0 |
<center>PIZZA! $PIZZA slices delivered: @danzocal<sub>(9/10)</sub> tipped @coderad <sub>Moon is coming</sub></center>
author | pizzabot |
---|---|
permlink | re-how-i-saved-100s-of-hours-of-work-for-a-local-company-using-python-and-python-docx-n00b-friendly-part-22-20250412t104432z |
category | hive-169321 |
json_metadata | "{"app": "pizzabot"}" |
created | 2025-04-12 10:44:33 |
last_update | 2025-04-12 10:44:33 |
depth | 1 |
children | 0 |
last_payout | 2025-04-19 10:44:33 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 122 |
author_reputation | 7,561,320,422,270 |
root_title | "How I saved 100s of hours of work for a local company using Python and python-docx (N00B Friendly) [Part 2/2]" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 142,054,407 |
net_rshares | 0 |