2012-07-18 145 views
0

我想要執行的最終代碼是在名爲'names.txt'的文本文檔中讀取一個名稱字符串。然後告訴程序計算該文件中有多少名字,並顯示名字的數量。我到目前爲止的代碼是爲了在文本文件中顯示數字的總和,但是它足夠接近我現在需要的程序,我想我可以重新編寫它以收集字符串/名稱的數量和顯示,而不是總和。讀取文件並顯示該文件中名稱的總和

這是迄今爲止代碼:

def main(): 
    #initialize an accumulator. 
    total = 0.0 

    try: 
     # Open the file. 
     myfile = open('names.txt', 'r') 

     # Read and display the file's contents. 
     for line in myfile: 
      amount = float(line) 
      total += amount 

     # Close the file. 
     myfile.close() 

    except IOError: 
     print('An error occured trying to read the file.') 

    except ValueError: 
     print('Non-numeric data found in the file.') 

    except: 
     print('An error occured.') 

# Call the main function. 
main() 

我還是很新的,以Python編程,所以請不要對我太苛刻了。如果任何人都可以找出如何重寫這個來顯示數字/名稱的數量而不是數字的總和。我將不勝感激。如果這個程序不能重寫,我會很樂意解決一個新的解決方案。

編輯:這它的 'names.txt中' 將是什麼樣子的例子:

約翰

瑪麗

保羅

+1

是名各不同的路線? – 2012-07-18 16:51:07

+0

這是一項家庭作業嗎?另外,名稱如何劃定?每個人都在自己的路線上,他們是否用分號隔開?逗號?沒有足夠的信息來回答這個問題。 – 2012-07-18 16:51:50

+0

你能告訴我們一個names.txt文件的例子嗎?該文件的格式是否始終保持不變(例如,新行上的每個名稱或逗號分隔或空格分隔等)? – ntlarson 2012-07-18 16:51:55

回答

0

如果你只是想以統計線文件

# Open the file. 
myfile = open('names.txt', 'r') 

#Count the lines in the file 
totalLines = len(myfile.readlines()): 

# Close the file. 
myfile.close() 
+0

1.您可以使用'chunk.count('\ n')'而不是'.readlines()'來統計文件中的行數,參見['wc-l.py' in評論](http://stackoverflow.com/q/9371238/4279)。 2.要計算符合某些條件的行,可以使用一個生成器:['sum(1 for line in myfile if match(line))'](http://stackoverflow.com/a/11546679/4279)不加載內存中的整個文件爲'.readlines()'。 – jfs 2014-04-29 06:12:32

0
fh = open("file","r") 
print "%d lines"%len(fh.readlines()) 
fh.close() 

或你可以做

fh=open("file","r") 
print "%d words"%len(fh.read().split()) 
fh.close() 

這一切是一點都不難找到,如果你提出一些努力......剛剛起步的答案通常會導致不及格課程考慮在你的文本文件的名稱的現成資料...

0

是按行劃分。

myfile = open('names.txt', 'r') 
lstLines = myfile.read().split('\n') 

dict((name,lstLines.count(name)) for name in lstLines) 

這創建了每個名稱的出現次數的字典。

要搜索perticular名的發生,如在列表中使用空格

lstLines.count('name1') 
0

假設名字分裂「名1」:

def main(): 
    #initialize an accumulator. 
    total = 0.0 

    try: 
     # Open the file. 
     myfile = open('names.txt', 'r') 

     # Read and display the file's contents. 
     for line in myfile: 
      words = line.split() 
      total += len(words) 

     # Close the file. 
     myfile.close() 

    except IOError: 
     print('An error occured trying to read the file.') 

    except ValueError: 
     print('Non-numeric data found in the file.') 

    except: 
     print('An error occured.') 

# Call the main function. 
main() 
-1

使用with語句打開文件。即使發生異常,它也會正確關閉文件。您可以省略文件模式,它是默認的。

如果每個名字是自己的路線,並沒有重複:

with open('names.txt') as f: 
    number_of_nonblank_lines = sum(1 for line in f if line.strip()) 
name_count = number_of_nonblank_lines 

的任務是非常簡單的。從一個新的代碼開始,以避免累積未使用/無效的問題代碼。

如果你需要的是計算在一個文件中(如wc -l命令)行,那麼你可以使用.count('\n')方法:

#!/usr/bin/env python 
import sys 
from functools import partial 

read_chunk = partial(sys.stdin.read, 1 << 15) # or any text file instead of stdin 
print(sum(chunk.count('\n') for chunk in iter(read_chunk, ''))) 

參見,Why is reading lines from stdin much slower in C++ than Python?