Python程式設計技巧 簡單的wc命令實現

2021-09-11 10:40:15 字數 2868 閱讀 4356

wc這個命令可以實現對檔案行數、單詞數、位元組數等的統計。

[root@sj python]# wc      (ctrl + d 退出)

hello

good morning

2       3      20        (2行,3個單詞,20個位元組)

[root@sj ~]# wc /etc/passwd

26   38 1206 /etc/passwd

下面寫乙個簡單的程式來實現這個功能。 

程式一:

通過標準輸入來獲取內容並統計:

#!/usr/bin/python

import sys

data = sys.stdin.read()

lines = data.count('\n')

words =len( data.split())

chars = len(data)

#print('%s %s %s ' % (lines,words,chars))     #傳統的字串替換

print '%(lines)s  %(words)s  %(chars)s' %locals()  

#高階用法,%(key)s,表示格式化關鍵字替換,後面就需要以字典的方式傳入對應的key值,而locals(),表示當前環境下所有的變數和值的字典,所以這裡可以進行替換

#print('%(lines)s %(words)s %(chars)s' % ) 這種方法和上面利用locals的方式是一樣的,只不過locals的變數更多而已

執行結果:

[root@sj ~]# python wc01.py 

heloo

www2  2  10

[root@sj ~]# 

程式二:

通過引數形式獲取檔案:

[root@sj ~]# cat ar**02.py

#!/usr/bin/python

import sys

import os

try:

fn = sys.ar**[1]    #監控這裡的異常

except indexerror:

print "please follow a argument after %s" %__file__      #異常**處理

sys.exit()

if not os.path.exists(fn):              #如果輸入的檔案路徑不存在

print " %s is not exists" %fn

sys.exit()

with open(fn) as fd:

data = fd.read()

lines = data.count('\n')

words = len(data.split())

chars = len(data)

print "%(lines)s %(words)s %(chars)s" %locals()

執行結果:

[root@sj ~]# python ar**02.py 

please follow a argument after ar**02.py

[root@sj ~]# python ar**02.py  /etc/hosts

3 13 216

程式三:

既可以通過標準輸入來獲取內容並統計,又可以通過引數形式獲取檔案:

[root@sj ~]# cat hb3.py

#!/usr/bin/python

import sys

import os

if len(sys.ar**) == 1:          #如果引數長度等於1,    意味著標準輸入讀取

data = sys.stdin.read()

else:                                   #否則以下是通過引數檔案讀取

try:

fn = sys.ar**[1]

except indexerror:

print "please follow a argument after %s" %__file__

sys.exit()

if not os.path.exists(fn):

print "%s is not exists" %fn

sys.exit()

with open(fn) as fd:

data = fd.read()

lines = data.count('\n')

words = len(data.split())

chars = len(data)

print "%(lines)s %(words)s %(chars)s" %locals()

執行結果:

1、通過標準輸入來獲取內容

[root@sj ~]# python hb2.py

where arre

you2 3 16

2、通過引數形式獲取檔案

[root@sj ~]# python hb2.py /etc/passwd

32 52 1530

[root@sj ~]# python hb2.py /etc/231wdas

/etc/231wdas is not exists

參考文章:

簡單程式設計技巧

引自soul machine leetcode 題解 1 在判斷兩個浮點數a和b是否相等時,不要用a b,應該判斷二者之差的絕對值fabs a b 是否小於某乙個閾值,例如le 9 2 判斷乙個整數是否是奇數,用x 2!0,不要用x 2 1。因為x可能是負數 3 用char的值作為陣列的下標 例如,...

Python程式設計技巧

python 字典中使用了 hash table,因此查詢操作的複雜度為 o 1 而 list 實際是個陣列,在 list 中,查詢需要遍歷整個 list,其複雜度為 o n 因此對成員的查詢訪問等操作字典要比 list 更快。set 的 union,intersection,difference ...

python程式設計技巧

將乙個字串轉化成ascii碼並遍歷 for c in map ord,raw input 將乙個字串轉化成ascii碼並儲存到列表 l ord i ord a for i in input 字典,如果key存在則value 1否則建立 key,value 0 mp d sum mp d get d,...