Compare commits

..

No commits in common. "fa6cb6c65ed7d16dd05b6ce010f8f9eef3948c1b" and "409b8d4a2ada356f3d2bb54a10e81ed96ebd6395" have entirely different histories.

6 changed files with 62 additions and 70 deletions

View File

@ -1,7 +1,3 @@
# `frontmatter-to-csv` - Convert YAML front matter to CSV
# Example package
This simple Python script will convert fields from the YAML front matter to your specified CSV fields.
Optionally, it can transform some of the fields:
* convert Python lists to comma-joined lists
* convert varied human-readable durations to unified unit (hours)
This is a simple example package.

55
convert.py Executable file
View File

@ -0,0 +1,55 @@
from queue import Empty
from typing import Dict
from durations import Duration
import os
import frontmatter
import csv
directory = "games"
outputfile = "test.csv"
filtered = dict()
fields = {
"name": "Name",
"playtime": "Playtime",
"platform": "Platform",
"infinite": "Infinite",
"finished": "Finished",
"refunded": "Refunded",
"dropped": "Dropped",
"date-released": "DateReleased",
"date-purchased": "DatePurchased",
"date-started": "DateStarted",
"date-finished": "DateFinished",
}
with open(outputfile, "w", newline="") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fields.values())
writer.writeheader()
for filename in os.listdir(directory):
f = os.path.join(directory, filename)
if os.path.isfile(f):
article = frontmatter.load(f)
for field in fields:
if field not in article.metadata.keys():
newvalue = ""
else:
newvalue = article.metadata[field]
if field == "playtime" and newvalue != 0 and newvalue is not None:
if type(newvalue) is dict:
totalvalue = 0
for key in newvalue:
timevalue = Duration(newvalue[key]).to_hours()
totalvalue += timevalue
newvalue = totalvalue
else:
timevalue = Duration(newvalue)
newvalue = timevalue.to_hours()
if type(newvalue) is list:
print(
f"Field '{field}' for file '{filename}' is a list, joining with commas."
)
newvalue = ",".join(newvalue)
filtered[fields[field]] = newvalue
writer.writerow(filtered)

View File

@ -1,14 +1,14 @@
[metadata]
name = frontmatter-to-csv-lkucharczyk
name = example-pkg-YOUR-USERNAME-HERE
version = 0.0.1
author = Lukáš Kucharczyk
author_email = lukas@kucharczyk.xyz
description = Convert YAML front matter to CSV
description = A small example package
long_description = file: README.md
long_description_content_type = text/markdown
url = https://git.kucharczyk.xyz/lukas/frontmatter-to-csv
url = https://git.kucharczyk.xyz/templates/python
project_urls =
Bug Tracker = https://git.kucharczyk.xyz/lukas/frontmatter-to-csv/issues
Bug Tracker = https://git.kucharczyk.xyz/templates/python/issues
classifiers =
Programming Language :: Python :: 3
License :: OSI Approved :: MIT License

View File

@ -1,60 +0,0 @@
"""
Convert YAML front matter to CSV
"""
from queue import Empty
from typing import Dict
from durations import Duration
import os
import frontmatter
import csv
directory = "games"
outputfile = "test.csv"
filtered = dict()
fields = {
"name": "Name",
"playtime": "Playtime",
"platform": "Platform",
"infinite": "Infinite",
"finished": "Finished",
"refunded": "Refunded",
"dropped": "Dropped",
"date-released": "DateReleased",
"date-purchased": "DatePurchased",
"date-started": "DateStarted",
"date-finished": "DateFinished",
}
if __name__ == '__main__':
with open(outputfile, "w", newline="") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fields.values())
writer.writeheader()
for filename in os.listdir(directory):
f = os.path.join(directory, filename)
if os.path.isfile(f):
article = frontmatter.load(f)
for field in fields:
if field not in article.metadata.keys():
newvalue = ""
else:
newvalue = article.metadata[field]
if field == "playtime" and newvalue != 0 and newvalue is not None:
if type(newvalue) is dict:
totalvalue = 0
for key in newvalue:
timevalue = Duration(newvalue[key]).to_hours()
totalvalue += timevalue
newvalue = totalvalue
else:
timevalue = Duration(newvalue)
newvalue = timevalue.to_hours()
if type(newvalue) is list:
print(
f"Field '{field}' for file '{filename}' is a list, joining with commas."
)
newvalue = ",".join(newvalue)
filtered[fields[field]] = newvalue
writer.writerow(filtered)

1
src/package-name/main.py Normal file
View File

@ -0,0 +1 @@