0

複数の名前と住所または電話番号を含む「txt」ファイルが 2 つあります。私がする必要があるのは、ファイルを読み取り、最初と最後の文字の前後にある可能性のあるスペースを削除し、それらの値がテキストファイルに存在します。例えば:

ファイルphonefile:

Marco: 347 8987989
  giorgio  : 06 89786765
 Mauro B.: 3489878675
Ciro : 07897878
L. De La: 09877887

ファイルaddrfile:

Giorgio : via Verdi, 23
 M. Bianchi:Piazza Milano, 1
   L. De La : via A. Einstein, 12
 Ciro: via Pio

なる必要があります:

{'giorgio': {'phone': '06 89786765'},
'Marco': {'phone': '347 8987989'},
'Giorgio': {'address': 'via Verdi, 23'},
'L. De La': {'address': 'via A. Einstein, 12', 'phone': '09877887'},
'Ciro': {'address': 'via Pio', 'phone': '07897878'},
'Mauro B.': {'phone': '3489878675'},
'M. Bianchi': {'address': 'Piazza Milano, 1'}}

これは私がこれまでに試したことです:

def f_phone_addr(phonefile, addrfile):
from collections import defaultdict
e = open(phonefile)
e.readlines()
f = open(addrfile)
f.readlines()
out = defaultdict(dict)
for name, phonenumber in phonefile:
    out[name]['phone'] = phonenumber
for name, address in addrfile:
    out[name]['address'] = address           
return out

助けてください!

4

2 に答える 2

1

基本的には、行のクリーンアップと処理を追加するだけです:

私はこのようなことをします:

from collections import defaultdict

def clean_line(line):
    name, _, value = line.partition(':')
    return name.strip(), value.strip()

def process_file(dic_, file, key):
    for line in file:
        name, value = clean_line(line)
        dic_[name][key] = value

def f_phone_addr(phonefile, addrfile):

    out = defaultdict(dict)
    with open(phonefile) as pf, open(addrfile) as af:
        process_file(out, pf, 'phone')
        process_file(out, af, 'address')
    return out
于 2012-10-31T11:36:34.267 に答える
1
phones = dict((k.strip(), v.strip()) for k, v in
              [l.split(":") for l in
               [l.strip() for l in
                open('phonefile').read().split('\n') if l]])
addrs = dict((k.strip(), v.strip()) for k, v in
             [l.split(":") for l in
              [l.strip() for l in
               open('addrfile').read().split('\n') if l]])

dict((k, {'phone': phones.get(k), 'address': addrs.get(k)}) for k in
      set(phones.keys() + addrs.keys()))

結果

{'Ciro': {'address': 'via Pio', 'phone': '07897878'},
 'Giorgio': {'address': 'via Verdi, 23', 'phone': None},
 'L. De La': {'address': 'via A. Einstein, 12', 'phone': '09877887'},
 'M. Bianchi': {'address': 'Piazza Milano, 1', 'phone': None},
 'Marco': {'address': None, 'phone': '347 8987989'},
 'Mauro B.': {'address': None, 'phone': '3489878675'},
 'giorgio': {'address': None, 'phone': '06 89786765'}}
于 2012-10-31T11:37:38.527 に答える