2016-05-01 8 views
0

私はTXBabynamesという名前の.txtファイルを持っています。男性と女性にとって最も人気のある名前が必要です。この文書には1000を超えるエントリがあります。このデータを私のPythonコードにどうやって取得するかについてはわかりません。.txtファイルの名前をPythonコードにプルするには

Babies = open ("c:\TestData\TXBabyNames.txt")` 

FemaleCount = 0 
MaleCount = 0 
femaleyear1910 = 0 
maleyear1910 = 0 
femaleyear2012 = 0 
maleyear2012 = 0 
totalbabies = 0 
myname1910 = 0 
myname1910to1960 = 0 
name = [] 

Babies.readline() 

for line in Babies: 
    element = line.strip().split(",") 
    state ,sex ,year ,name, Freq = element 
    if sex == "F": 
     FemaleCount = FemaleCount + 1 
    if sex == "M": 
     MaleCount = MaleCount + 1 
    if sex == "F" and year == "1910": 
     femaleyear1910 = femaleyear1910 + 1 
    if sex == "M" and year == "1910": 
     maleyear1910 = maleyear1910 + 1 
    if sex == "F" and year == "2012": 
     femaleyear2012 = femaleyear2012 + 1 
    if sex == "M" and year == "2012": 
     maleyear2012 = maleyear2012 + 1 
    if year == "2012": 
     totalbabies = totalbabies + 1 
    if name == "John" and year >= "1910": 
     myname1910 = myname1910 + 1 
    if name == "John" and year >= "1910" and year <= "1960": 
     myname1910to1960 = myname1910to1960 + 1 

print('The total number of females are :' +str (FemaleCount)) 

print('The total number of males are :' +str (MaleCount)) 

print('The total number of females born in 1910 is:' +str(femaleyear1910)) 

print('The total number of males born in 1910 is:' +str(maleyear1910)) 

print('The total number of females born in 2012 are:' +str(femaleyear2012)) 

print('The total number of males born in 2012 are:' +str(maleyear2012)) 

print('The total number of babies born in 2012 are:' +str(totalbabies)) 

print('The total number of babies with my name since 1910 are:' +str(myname1910)) 

print('The total number of babies with my name in between the years 1910 and 1960 are:' +str(myname1910to1960)) 
+2

ここであなたは正確に何を求めていますか?あなたのコードからファイルの内容を読むには? –

+1

これは、データのフォーマット方法、ファイルのエンコード方法、目的などによって大きく左右されます。詳細はいくつか教えてください。 – patrick

+0

辞書やリストなどのPythonのコンテナクラスのインスタンスに情報を開いて読み込み、その情報を格納する必要があります。 – martineau

答えて

1

これは動作するはずです:あなたが名前(だけでなく、ジョン)に基づいて、より詳細な分析をしたい場合は、ネストされたカウンター(カウンターのdefaultdict)を行うことができます

from collections import Counter 

males, females, johns = Counter(), Counter(), Counter() 
with open("c:\TestData\TXBabyNames.txt") as baby_file: 
    for line in baby_file: 
     element = line.strip().split(",") 
     state, sex, year, name, freq = element 
     if sex == "M": 
      males[year] += int(freq) 
     elif sex == "F": 
      females[year] += int(freq) 
     if name == "John": 
      johns[year] += int(freq) 

print('The total number of females are: ', sum(females.values())) 
print('The total number of males are: ', sum(males.values())) 

print('The total number of females born in 1910 is:', females['1910']) 
print('The total number of males born in 1910 is:', males['1910']) 

print('The total number of females born in 2012 is:', females['2012']) 
print('The total number of males born in 2012 is:', males['2012']) 
print('The total number of babies born in 2012 are:', females['2012'] + males['2012']) 

print('The total number of babies with my name since 1910 are:', sum(johns[year] for year in johns if int(year) >= 1910)) 

print('The total number of babies with my name in between the years 1910 and 1960 are:', sum(johns[year] for year in johns if 1960 >= int(year) >= 1910)) 

が、発電機の内包その後少し長くなる。


私は、最も一般的な男性と女性の名前を検索したいについてコメントを見ました:その場合、私は(彼らは重要ではありませんと仮定)年無視して、ただそれ2つのCounter sの作ると思いますキーとしての名前。

+0

上記のコードを実行してValueErrorを取得しようとしました。アンパックするには1つ以上の値が必要です – JLuna

+0

女性レコードはいくつありますか?男性レコードはいくつありますか? 1910年にいくつの女性記録がありますか? 1910年に男性レコードはいくつあったのですか? 2012年にはいくつの女性記録がありますか? 2012年には男性レコードはいくつありますか? 2012年にテキサス州で生まれた赤ちゃんの総数はいくらですか? 1910年以来あなたの名前でテキサス州で生まれた赤ちゃんの総数はいくらですか? 1910年から1960年の間にあなたの名前でテキサス州で生まれた赤ちゃんの総数はいくらですか?非常に珍しい名前がある場合は、好奇心が強い名前を自由に選んでください。 – JLuna

+0

最も人気のある名前(1年で最も高い):*男性の場合*女性の場合 名前は何ですか? *男性の場合*女性の場合 何年ですか? *男性の場合*女性の場合 あなたの名前は何年に一番人気がありましたか? – JLuna

関連する問題