自動生成された CSV レポートにいくつかの調整を加えています。私は現在、患者の生年月日を取り、それを月と年の年齢に変換する必要がある部分で立ち往生しています。元の CSV には既に年齢の列があり、DOB 列のデータを変換して Age in Days を見つける方法を見つけましたが、それを月/年に変換できるようにする必要があります。また、その計算値を取得して、現在のフィールドの値を置き換えます。現在のフィールドは、実際の一貫したフォーマットを持たない手書きの文字列です。実際の CSV には約 1700 行と 18 列があり、標準のコンマを使用してそれらを区切っているため、例として短い形式を作成し、見やすくするためにインデントを使用しています。
Last_Name First_Name MI age DOB SSN visit_date
Stalone Frank P 62yrs 10 months 07-30-1950 123456789 05-02-2013
Astley Richard P 47years3mo 02-06-1966 987654321 05-03-2013
私が欲しいものは次のようになります:
Last_Name First_Name MI Age DOB SSN
Stalone Frank P 62y10mo 07-30-1950 123456789
Astley Richard P 47y3mo 02-06-1966 987654321
編集: date.year と date.month を使用して年と月を減算できることに気付き、これらの値を見つけやすくしました。私は今自分のコードを編集しており、動作するようになったら更新しますが、質問の2番目の部分でまだ問題があります。
これまでの私のコード:
import re
import csv
import datetime
with open(inputfile.csv','r') as fin, open(outputfile.csv','w') as fout:
reader = csv.DictReader(fin)
fieldnames = reader.fieldnames
writer_clinics = csv.DictWriter(fout, fieldnames, dialect="excel")
writer_clinics.writeheader()
for row in reader:
data = next(reader)
today = datetime.date.today()
DOB = datetime.datetime.strptime(data["DOB"], "%m/%d/%Y").date()
age_y = (today.year - DOB.year)
age_m = (today.month - DOB.month)
if age_m < 0:
age_y = age_y - 1
age_m = age_m + 12
age = str(age_y) + " y " + str(age_m) + " mo "
print (age)
それで、年齢をoutputfile.csvの正しいフィールドに書き込む方法を見つけようとしていますか?
更新 2: ほとんどの書き込みを行うことができましたが、入力ファイルの特定のフィールドが空のままであるというエラーが発生しています。私の上司はまた、彼が実際に任命した日付に応じて、私に年齢を記入することを望んでいました. 私の現在のコードの塊:
import re
import csv
import datetime
def getage(visit, dob):
years = visit.year - dob.year
months = visit.month - dob.month
if visit.day < dob.day:
months -= 1
if months < 0:
months += 12
years -= 1
return '%sy%smo'% (years, months)
with open('inputfile.csv','r') as fin, open('outputfile.csv','w') as fout:
reader = csv.DictReader(fin)
writer_clinics = csv.DictWriter(fout, reader.fieldnames, dialect="excel")
writer_clinics.writeheader()
for data in reader:
visit_date = datetime.strptime(data["visit_date"], "%m-%d-%Y").date()
DOB = datetime.datetime.strptime(data["DOB"], "%m-%d-%Y").date()
data["Age"] = getage(visit_date, DOB)
writer_clinics.writerow(data)