python的速度效率是不高的,如何對速度要求比較高的話建議可以用c來寫。
十年的梓潼網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整梓潼建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“梓潼網(wǎng)站設(shè)計”,“梓潼網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
我寫了這個代碼,python2.6+windows xp測試通過。
希望能幫到你~
===================================================
a=[] #初始化要用到的列表a,用于記錄原始行信息
b=[] #初始化要用到的列表b,用于記錄結(jié)果數(shù)據(jù),由兩項構(gòu)成。前一項為行信息如“小明:90”,后一項為該行對應(yīng)的出現(xiàn)次數(shù)如2
f1=file("1.txt", "r") #打開1.txt文件
for line in f1:
a.append(line) #將1.txt文件每一行作為一個元素,存入列表a
f1.close
for n in a: #遍歷a中每一項(記為n),即1.txt中每一行
flag=1
for i in range(0,len(b)):
if n == b[i][0]: #n與列表b中的每一項對比,如果有相等的:
b[i][1]=b[i][1]+1 #那么對應(yīng)的出現(xiàn)計數(shù)加1
flag=0
break
if flag==1: #如果前面的比對沒有一個相等的,即該行是第一次出現(xiàn):
b.append([n,1]) #那么在列表b中添加改行為新的一項
f2=file("2.txt", "w") #打開2.txt文件,用于輸出
for n in b: #輸出格式為:行信息 (tab) 出現(xiàn)次數(shù) (回車)
f2.write(str(n[0][0:-1]) + "\t")
f2.write(str(n[1]) + "\n")
f2.close
print "Finished" #完成
準(zhǔn)備測試數(shù)據(jù):
測試數(shù)據(jù)
打開PyCharm輸入以下代碼
程序代碼
運行效果如下:
運行效果展示
附上實現(xiàn)代碼:
#!/usr/bin/env python
import pandas as pd
OPENPATH = 'test.xls'
SAVEPATH = 'test1.xls'
def total_count(path=OPENPATH, sheetname='testsheet'):
df = pd.read_excel(path, sheet_name=sheetname, names=['值', '計數(shù)'])
# 獲取統(tǒng)計項目
item_name = set(df['值'])
# 創(chuàng)建字典統(tǒng)計
total_dict = dict(zip([i for i in item_name], [
0 for _ in range(len(item_name))]))
# 遍歷”值“列,逐個統(tǒng)計數(shù)量
for index, item in enumerate(df['值']):
# 如果在set中
if item in item_name:
# 加入計數(shù)統(tǒng)計
total_dict[item] += df['計數(shù)'][index]
# 返回
return total_dict
def datato_excel(path=SAVEPATH, sheet_name='total', data_dict={}):
report_df = pd.DataFrame.from_dict(data_dict,orient='index')
xl_writer = pd.ExcelWriter(path)
report_df.to_excel(xl_writer, sheet_name)
try:
xl_writer.save()
print('Save completed')
except:
print('Error in saving file')
if __name__ == "__main__":
datato_excel(data_dict=total_count())
不知道這是不是您想要的結(jié)果,如果有幫助,請采納一下,謝謝!
使用open函數(shù)逐行讀取文件,依次對比,如包含要求字符串,則數(shù)量累加1,讀取完成后可統(tǒng)計出行數(shù),代碼如下:
n?=?0
for?line?in?open('filename','r'):
if?'固定字符串'?in?line:
n?+=?1
print(n)
說明:
使用 for line in open這種方式可以提高代碼效率,如需要更復(fù)雜統(tǒng)計,例如重復(fù)行,則可以使用hash函數(shù),把行hash值存入列表,再做統(tǒng)計。
enumerate()說明
enumerate()是python的內(nèi)置函數(shù)
enumerate在字典上是枚舉、列舉的意思
對于一個可迭代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值
enumerate多用于在for循環(huán)中得到計數(shù)
例如對于一個seq,得到:
(0, seq[0]), (1, seq[1]), (2, seq[2])
1
1
enumerate()返回的是一個enumerate對象,例如:
enumerate()使用
如果對一個列表,既要遍歷索引又要遍歷元素時,首先可以這樣寫:
list1 = ["這", "是", "一個", "測試"]
for i in range (len(list1)):
print i ,list1[i]123123
上述方法有些累贅,利用enumerate()會更加直接和優(yōu)美:
list1 = ["這", "是", "一個", "測試"]
for index, item in enumerate(list1):
print index, item
0 這
1 是
2 一個
3 測試1234567812345678
enumerate還可以接收第二個參數(shù),用于指定索引起始值,如:
list1 = ["這", "是", "一個", "測試"]
for index, item in enumerate(list1, 1):
print index, item
1 這
2 是
3 一個
4 測試1234567812345678
補充
如果要統(tǒng)計文件的行數(shù),可以這樣寫:
count = len(open(filepath, 'r').readlines())11
這種方法簡單,但是可能比較慢,當(dāng)文件比較大時甚至不能工作。
可以利用enumerate():
count = -1
for index, line in enumerate(open(filepath,'r')):
count += 1