3

[Python3] 電子メール アドレスと対応する国コードを含む (長い) CSV ファイルを読み取り、国コードごとに分割するスクリプトがあります。これはうまくいっていますが、スクリプトが各ファイルごとに行数 (つまり、電子メール) (書き込まれた) を出力するようにしたいと考えています。

また、私はプログラミングと Python に非常に慣れていないため、最適化に関する提案やその他の一般的なヒントを受け取ることができて非常に嬉しく思います。

入力ファイルは次のようになります。

12345@12345.com     us
xyz@xyz.com         gb
aasdj@ajsdf.com     fr
askdl@kjasdf.com    de
sdlfj@aejf.com      nl
...                 ...

出力は次のようになります。

Done!
us: 20000
gb: 20000
de: 10000
fr: 10000
nl: 10000
...

私のコードは次のとおりです。

import csv, datetime
from collections import defaultdict

"""
Script splits a (long) list of email addresses with associated country codes by country codes.
Input file should have only two columns of data - ideally.
"""

# Declaring variables
emails = defaultdict(list)
in_file = "test.tsv"          # Write filename here.
filename = in_file.split(".")

"""Checks if file is comma or tab separated and sets delimiter variable."""
if filename[1] == "csv":
    delimiter = ','
elif filename[1] == "tsv":
    delimiter = '\t'

"""Reads csv/tsv file and cleans email addresses."""
with open(in_file, 'r') as f:
    reader = csv.reader(f, delimiter=delimiter)
    for row in reader:
        # Gets rid of empty rows
        if row:
            # Gets rid of non-emails
            if '@' in row[0]:
                # Strips the emails from whitespace and appends to the 'emails' list
                # Also now 'cc' is in the first position [0] and email in the second [1]
                emails[row[1].strip()].append(row[0].strip()+'\n')

""""Outputs the emails by cc and names the file."""
for key, value in emails.items():
    # Key is 'cc' and value is 'email'
    # File is named by "today's date-original file's name-cc"
    with open('{0:%Y%m%d}-{1}-{2}.csv'.format(datetime.datetime.now(), filename[0], key), 'w') as f:
        f.writelines(value)
4

1 に答える 1