2016-08-02 10 views
-1

Iam versucht, das babynames Problem in der Google Python-Klasse zu lösen und führte das folgende Skript aus.zeigt TypeError: Sequenzelement 0: erwartete Zeichenfolge, int gefunden; beim Konvertieren von Liste in Text

def extract_names(filename): 
    year=0 
    f=open(filename,'rU') 
    contents=f.read() 
    match = re.search(r'(/w+/s/w+/s)(/d/d/d/d)',contents) 
    if match: 
    year=match.group() 
    names=[] 
    names.append(year) 

    names_rank={} 
    m = re.findall(r'<td>(/d+)</td><td>(/w+)</td><td>(/w+) </td>',contents) 
    for item in m: 
    (r,boyname,girlname)=item 
    if boyname not in names_rank: 
    names_rank[boyname]=r 
    if girlname not in names_rank: 
    names_rank[girlname]=r 
    sorted_names=sorted(names_rank.keys()) 
    for name in sorted_names: 
    names.append(name+' '+names_rank[name]) 
    return names 
def main(): 
    args = sys.argv[1:] 

    if not args: 
    print 'usage: [--summaryfile] file [file ...]' 
    sys.exit(1) 
    summary = False 
    if args[0] == '--summaryfile': 
    summary = True 
    del args[0] 
    for filename in args: 
    names = extract_names(filename) 
    t = '\n'.join(names) 

    if summary: 
    fileout = open(filename, 'w') 
    fileout.write(t + '\n') 
    fileout.close() 
    else: 
    print text 

if __name__ == '__main__': 

in Funktion main gibt es einen Fehler

File "babynames.py", line 78, in main 
t = '\n'.join(names) 
TypeError: sequence item 0: expected string, int found 

hier Namen ist eine Liste und mein Ziel ist es durch die Verwendung

t = '\n'.join(names)#where t is the text 

aber es Text aus der ganzen Liste zu machen zeigt Int, gefunden, was kann der Grund dafür sein.wie das Problem zu lösen?

Antwort

2

Es ist, weil das erste Element von names eine Ganzzahl ist und es sollte eine Zeichenfolge sein, wenn Sie sie zusammenfügen möchten. Versuchen Sie dies:

t = '\n'.join(str(n) for n in names) 
Verwandte Themen