python文件操作: 統(tǒng)計(jì)行數(shù),符號(hào)替換

前言


我的第一篇博客顶别,記錄操作系統(tǒng)python小作業(yè)谷徙,該作業(yè)有如下要求:

  1. 讀取 .txt 文件,統(tǒng)計(jì)行數(shù)
  2. 將文件中的 制表符 換成 空格

讀取txt文件和其他文本文件一樣驯绎,所以這套代碼可以統(tǒng)計(jì)py文件行數(shù)或者c之類(lèi)的代碼行數(shù)完慧,感覺(jué)有點(diǎn)實(shí)用價(jià)值,第二問(wèn)也可以做到字符與字符的替換剩失。

思路


第一題

  • 命令行輸入文件名字 # python test.py a.txt
  • 讀取a.txt文件屈尼,用readlines()方法讀取行數(shù)
f.readlines() # 將文件以換行符處理, 生成列表返回

舉個(gè)??:

# a.txt
Because of you
I never stray too far from the sidewalk
Because of you
I learned to play on the safe side so I don't get hurt
f = open("./a.txt", "r")
content = f.readlines()
print(content) # ['Because of you\n', 
                              #'I never stray too far from the sidewalk\n', 
                              #'Because of you\n', 
                              #"I learned to play on the safe side so I don't get hurt\n"]
f.close()

由上面的小例子可以清晰地看到readlines()方法的作用,可以將 每一行 文本讀取出來(lái)赴叹,并且保存在一個(gè) list 之中鸿染,我們只需要計(jì)算這個(gè)list的長(zhǎng)度,就可以獲得這個(gè)文本的行數(shù)乞巧。

  • 需要注意的是由于用 "\n" 作為換行的標(biāo)志涨椒,所以空行也存在"\n",用此方法會(huì)把空行也當(dāng)作一行文本處理

第二題

  • 讀取文件
  • 每行依次讀取,將每行中的需要替換的字符替換.
    將第一題讀取的內(nèi)容用 .replace("\n", " ") 方法即可實(shí)現(xiàn)
content = "Because of you\n"
content = content.replace("\n", "")
print(content) # Because of you
# 第二問(wèn)我們用到 readline() 方法,該方法將文本一行一行讀取蚕冬,
# 而不是像readlines()那樣一次全部讀取到內(nèi)存中免猾,用這個(gè)方法
# 對(duì)于大文件可以較好完成任務(wù).
# 此外用for循環(huán)遍歷可以達(dá)到相同效果
f = open("a.txt", "r")
for i in f:
    print(i, end=" ") # print方法自身會(huì)打印"\n", 
                                     # 我們的文本也會(huì)打印"\n",
                                     # 因此這里我們不讓print方法打印\n
代碼(初步)(第一題)
#!/home/luo/.virtualenvs/ENV_OS/bin/python3
# -*- coding:utf-8  -*-

"""
統(tǒng)計(jì)輸入文本的行數(shù)

@time: 2020-3-21
"""

__author__ = 'Luo-DH'

import argparse


def processing_parameter(parser):
    """該函數(shù)用于處理用戶(hù)命令行的輸入
    
    Returns:
        輸入的文件路徑 (string)
    
    """

    parser.add_argument("path", help="需要讀取的文件的路徑")

    args = parser.parse_args()

    return args.path

def get_row_nums(path):
    """該函數(shù)用于得到文件的行數(shù)
    
    Returns:
        文件的行數(shù) (int)

    """

    f = open(path, "r")

    content = f.readlines()

    row_nums = len(content)

    return row_nums


if __name__ == '__main__':

    parser = argparse.ArgumentParser()

    path = processing_parameter(parser)

    row_nums = get_row_nums(path)

    print("{} {}".format(row_nums, path))

測(cè)試(第一題)
python test.py test.py
# 54 test.py
代碼(初步)(第二題)
#!/home/luo/.virtualenvs/ENV_OS/bin/python3
# -*- coding:utf-8 -*-

"""
用指定的字符替換文本的內(nèi)容

@time: 2020-3-21
"""

__author__ = 'Luo-DH'

import argparse


def processing_parameter(parser):
    """該函數(shù)用于處理用戶(hù)命令行的輸入
    
    Returns:
        path: 用戶(hù)輸入文件的路徑
        char1: 被替換的字符
        char2: 用于替換的字符
    
    """

    parser.add_argument("path", help="需要處理的文件路徑")

    parser.add_argument("char1", help="需要替換的字符")

    parser.add_argument("char2", default=" ", help="用以替換的字符")

    args = parser.parse_args()

    char1 = args.char1.encode('utf-8').decode('unicode_escape')

    char2 = args.char2.encode('utf-8').decode('unicode_escape')

    return args.path, char1, char2


def replace_char(path, char1, char2):
    """該函數(shù)用于處理字符串的替換
    
    Args:
        path: 文件路徑
        char1: 需要替換的字符
        char2: 用以替換的字符
    
    """

    f = open(path, "r")
    f2 = open(path+".after", "w")

    for i, content in enumerate(f):

        content = content.replace(char1, char2)

        f2.write(content)
        
    f.close()
    f2.close()

if __name__ == "__main__":

    parser = argparse.ArgumentParser()

    path, char1, char2 = processing_parameter(parser)

    replace_char(path, char1, char2)

特別說(shuō)明一下
args = parser.parse_args()

char1 = args.char1.encode('utf-8').decode('unicode_escape')

char2 = args.char2.encode('utf-8').decode('unicode_escape')
# 如果沒(méi)有這段代碼,將無(wú)法實(shí)現(xiàn)\n\t這類(lèi)字符的轉(zhuǎn)換

參考鏈接: python 使用argparse 輸入分割符時(shí)囤热,例如\t猎提,無(wú)法分割字符

測(cè)試(第二題)
python test2.py a.txt "\n" "\t"
# 會(huì)在當(dāng)前目錄生成處理好的文件(a.txt.after)

結(jié)語(yǔ)


  • 我的第一篇博客,記錄一下這個(gè)python小任務(wù)旁蔼,對(duì)于md書(shū)寫(xiě)還比較陌生锨苏,內(nèi)容上面如果有錯(cuò)誤歡迎提出,我還在學(xué)習(xí)中棺聊,有什么不懂的也可以聯(lián)系我伞租,共同進(jìn)步。
  • 另外限佩,我將會(huì)更新這兩個(gè)小任務(wù)的class版本葵诈。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市祟同,隨后出現(xiàn)的幾起案子作喘,更是在濱河造成了極大的恐慌,老刑警劉巖晕城,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泞坦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡广辰,警方通過(guò)查閱死者的電腦和手機(jī)暇矫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)择吊,“玉大人李根,你說(shuō)我怎么就攤上這事〖妇Γ” “怎么了房轿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)所森。 經(jīng)常有香客問(wèn)我囱持,道長(zhǎng),這世上最難降的妖魔是什么焕济? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任纷妆,我火速辦了婚禮,結(jié)果婚禮上晴弃,老公的妹妹穿的比我還像新娘掩幢。我一直安慰自己逊拍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布际邻。 她就那樣靜靜地躺著芯丧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪世曾。 梳的紋絲不亂的頭發(fā)上缨恒,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音轮听,去河邊找鬼骗露。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蕊程,可吹牛的內(nèi)容都是我干的椒袍。 我是一名探鬼主播驼唱,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼藻茂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了玫恳?” 一聲冷哼從身側(cè)響起辨赐,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎京办,沒(méi)想到半個(gè)月后掀序,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惭婿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年不恭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片财饥。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡换吧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钥星,到底是詐尸還是另有隱情沾瓦,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布谦炒,位于F島的核電站贯莺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宁改。R本人自食惡果不足惜缕探,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望还蹲。 院中可真熱鬧爹耗,春花似錦豁鲤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至讼溺,卻和暖如春楣号,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怒坯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工炫狱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剔猿。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓视译,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親归敬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酷含,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一、前言 學(xué)習(xí)就是一個(gè)不斷的自下而上汪茧,自上而下的過(guò)程椅亚。 前段時(shí)間,學(xué)著用python實(shí)現(xiàn)網(wǎng)站的數(shù)據(jù)爬取舱污,隱約get...
    Hobbit的理查德閱讀 7,019評(píng)論 0 6
  • 1.1. 字符編碼 1.1.1. 字符編碼的作用 計(jì)算機(jī)只認(rèn)識(shí)0和1組成的二進(jìn)制序列呀舔,因此任何文件中的內(nèi)容(比如"...
    郭_揚(yáng)閱讀 965評(píng)論 0 2
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,370評(píng)論 0 5
  • python之文件操作 一媚赖、文件操作基本流程 計(jì)算機(jī)系統(tǒng)分為:計(jì)算機(jī)硬件,操作系統(tǒng)珠插,應(yīng)用程序三部分惧磺。 我們用pyt...
    go以恒閱讀 428評(píng)論 0 4
  • element-ui隱藏組件scrollbar的使用 如果是按需引入,必須手動(dòng)引入scrollbar丧失,和Vue.u...
    啊燦2580閱讀 1,340評(píng)論 0 0