今週から Python の学習を始めたので、Excel ではなく Python を使用して、ファイル パスからいくつかのフィールドを解析しようと考えました。
命名規則にすべて適合する約 3000 個のファイルがあります。/Household/LastName.FirstName.Account.Doctype.Date.extension
たとえば、これらのファイルの 1 つに Cosby.Bill..Profile.2006.doc という名前が付けられ、フルパスは /Volumes/HD/Organized Files/Cosby, Bill/Cosby.Bill..Profile.2006.doc です。
この場合:
コスビー、ビルは世帯だろう
世帯 (Cosby、Bill) は、実際のファイルを囲むフォルダーです。
ビルがファーストネームだろう
コスビーが姓になる
Account フィールドが省略されています
プロファイルはDoctypeです
日付は2006年
docは拡張子です
これらのファイルはすべて、このディレクトリ /Volumes/HD/Organized Files/ にあります。ターミナルと ls を使用して、すべてのファイルのリストをデスクトップの .txt ファイルに取得し、ファイルパスからの情報を解析して上記のサンプルのようなカテゴリ。理想的には、各カテゴリの列を使用して csv に出力したいと考えています。ここに私の醜いコードがあります:
def main():
file = open('~/Desktop/client_docs.csv', "rb")
output = open('~/Desktop/client_docs_parsed.txt', "wb")
for line in file:
i = line.find(find_nth(line, '/', 2))
beghouse = line[i + len(find_nth(line, '/', 2)):]
endhouse = beghouse.find('/')
household = beghouse[:endhouse]
lastn = (line[line.find(household):])[(line[line.find(household):]).find('/') + 1:(line[line.find(household):]).find('.')]
firstn = line[line.find('.') + 1: line.find('.', line.find('.') + 1)]
acct = line[line.find('{}.{}.'.format(lastn,firstn)) + len('{}.{}.'.format(lastn,firstn)):line.find('.',line.find('{}.{}.'.format(lastn,firstn)) + len('{}.{}.'.format(lastn,firstn)))]
doctype_beg = line[line.find('{}.{}.{}.'.format(lastn, firstn, acct)) + len('{}.{}.{}.'.format(lastn, firstn, acct)):]
doctype = doctype_beg[:doctype_beg.find('.')]
date_beg = line[line.find('{}/{}.{}.{}.{}.'.format(household,lastn,firstn,acct,doctype)) + len('{}/{}.{}.{}.{}.'.format(household,lastn,firstn,acct,doctype)):]
date = date_beg[:date_beg.find('.')]
print '"',household, '"','"',lastn, '"','"',firstn, '"','"',acct, '"','"',doctype, '"','"',date,'"'
def find_nth(body, s_term, n):
start = body[::-1].find(s_term)
while start >= 0 and n > 1:
start = body[::-1].find(s_term, start+len(s_term))
n -= 1
return ((body[::-1])[start:])[::-1]
if __name__ == "__main__": main()
正常に動作しているようですが、別の囲みフォルダーがあると問題が発生し、すべてのフィールドがシフトします..たとえば、ファイルが存在するのではなく
/Volumes/HD/Organized Files/コスビー、ビル/
/Volumes/HD/Organized Files/Resigned/Cosby, Bill/ にあります。
私は、これを行うには、より不格好な方法が必要であることを知っています.