第二十九課:文件:一個任務(wù)

內(nèi)容來源于網(wǎng)絡(luò)厦凤,本人只是在此稍作整理肤寝,如有涉及版權(quán)問題,歸小甲魚官方所有字逗。

練習(xí)題(來自小甲魚官方論壇)

編程題

0. 編寫一個程序京郑,接受用戶的輸入并保存為新的文件,程序?qū)崿F(xiàn)如圖:

程序輸入.png

(圖片轉(zhuǎn)自https://blog.csdn.net/junwei0206/article/details/44988195
答:代碼如下:

def filewrite(file_name):
    print('請輸入內(nèi)容【單獨輸入‘:w’保存退出】:')
    f = open(file_name, 'w')
    while True:
        a = input()
        if a != ':w':
            f.write('%s\n' % a)  # 注意這里有換行符
        else:
            break

    f.close()


file_name = input('請輸入文件名:')
filewrite(file_name)

運行過程如下:

請輸入文件名:1111.txt
請輸入內(nèi)容【單獨輸入‘:w’保存退出】:
123
123
456
aaa
啊啊啊

:w

Process finished with exit code 0

文件打開查看:

123
123
456
aaa
啊啊啊

1. 編寫一個程序葫掉,比較用戶輸入的兩個文件,如果不同跟狱,顯示出所有不同處的行號與第一個不同字符的位置俭厚,程序?qū)崿F(xiàn)如圖:

1.png

(圖片轉(zhuǎn)自https://blog.csdn.net/junwei0206/article/details/44988195
答:代碼如下:

def file_compare(file1, file2):
    f1 = open(file1)
    f2 = open(file2)
    count = 0  # 統(tǒng)計行數(shù)
    differ = []  # 統(tǒng)計不一樣的數(shù)量
    for line1 in f1:
        line2 = f2.readline()
        count += 1
        if line1 != line2:
            differ.append(count)

    f1.close()
    f2.close()
    return differ


file1 = input('請輸入需要比較的頭一個文件名:')
file2 = input('請輸入需要比較的另一個文件名:')

differ = file_compare(file1, file2)

if len(differ) == 0:
    print('兩個文件完全一樣!')
else:
    print('兩個文件共有【%d】處不同:' % len(differ))
    print(differ)
    for each in differ:
        print('第%d行不一樣' % each)

輸出:

請輸入需要比較的頭一個文件名:1111.txt
請輸入需要比較的另一個文件名:33.txt
兩個文件共有【5】處不同:
[7, 13, 22, 24, 29]
第7行不一樣
第13行不一樣
第22行不一樣
第24行不一樣
第29行不一樣

2. 編寫一個程序驶臊,當用戶輸入文件名和行數(shù)(N)后挪挤,將該文件的前N行內(nèi)容打印到屏幕上,程序?qū)崿F(xiàn)如圖:

2.png

(圖片轉(zhuǎn)自https://blog.csdn.net/junwei0206/article/details/44988195
答:代碼如下:兩種都可以

def file_print(file, num):
    f = open(file)
    print('''文件%s的前%d行的內(nèi)容如下:''' % (file, num))
    for i in range(num):
        print(f.readline())
    f.close()


file_name = input('請輸入要打開的文件(C:\\test.txt):')
num = int(input('請輸入需要顯示該文件前幾行:'))
file_print(file_name, num)
def file_view(file_name, line_nun):
    print('\n文件%s的前%s的內(nèi)容如下:\n' % (file_name, line_num))
    f = open(file_name)
    for i in range(int(line_num)):
        print(f.readline(), end='')
    f.close()


file_name = input(r'請輸入要打開的文件(C:\\test.txt):')
line_num = input('請輸入需要顯示該文件前幾行:')
file_view(file_name, line_num)

3. 呃关翎,不得不說我們的用戶變得越來越刁鉆了扛门。要求在上一題的基礎(chǔ)上擴展,用戶可以隨意輸入需要顯示的行數(shù)纵寝。(如輸入13:21打印第13行到第21行论寨,輸入:21打印前21行,輸入21:則打印從第21行開始到文件結(jié)尾所有內(nèi)容)

3.png

(圖片轉(zhuǎn)自https://blog.csdn.net/junwei0206/article/details/44988195
答:代碼如下:

def file_print(file, paragraph):
    (start, end) = paragraph.split(':')
    if start == '':
        start = 1
    else:
        start = int(start)
    if end == '':
        end = -1
    else:
        end = int(end)

    f = open(file)
    if start == 1:
        if end == -1:
            print('''文件%s的從開頭到結(jié)束的內(nèi)容如下:''' % file)
        else:
            print('''文件%s的從開頭到第%d行的內(nèi)容如下:''' % (file, end))
    else:
        if end == -1:
            print('''文件%s的從%d行到結(jié)束的內(nèi)容如下:''' % (file, start))
        else:
            print('''文件%s的從第%d行到第%d行的內(nèi)容如下:''' % (file, start, end))

    for i in range(start - 1):
        f.readline()
    num = end - start + 1
    if num < 0:
        print(f.read())
    else:
        for i in range(num):
            print(f.readline())
    f.close()


file_name = input(r'請輸入要打開的文件(C:\\test.txt):')
paragraph = input('請輸入需要顯示的行數(shù)【格式如13:21或:21或21:】:')
while paragraph == '':
    paragraph = input('輸入有誤,請重新輸入:')
file_print(file_name, paragraph)

4. 編寫一個程序葬凳,實現(xiàn)“全部替換”功能绰垂。

答:代碼如下:

def file_replace(file_name, rep_word, new_word):
    f_read = open(file_name)

    content = []
    count = 0

    for each_line in f_read:
        if rep_word in each_line:
            count += each_line.count(rep_word)  # count感覺應(yīng)該用這個
            each_line = each_line.replace(rep_word, new_word)
        content.append(each_line)

    decide = input('\n文件 %s 中共有%s個【%s】\n您確定要把所有的【%s】替換為【%s】嗎?\n【YES/NO】:' \
                   % (file_name, count, rep_word, rep_word, new_word))

    if decide in ['YES', 'Yes', 'yes']:
        f_write = open(file_name, 'w')
        f_write.writelines(content)
        f_write.close()

    f_read.close()


file_name = input('請輸入文件名:')
rep_word = input('請輸入需要替換的單詞或字符:')
new_word = input('請輸入新的單詞或字符:')
file_replace(file_name, rep_word, new_word)

執(zhí)行過程:

請輸入文件名:33.txt
請輸入需要替換的單詞或字符:小丑魚
請輸入新的單詞或字符:小甲魚

文件 33.txt 中共有19個【小丑魚】
您確定要把所有的【小丑魚】替換為【小甲魚】嗎火焰?
【YES/NO】:YES

Process finished with exit code 0

5.請寫下這一節(jié)課你學(xué)習(xí)到的內(nèi)容:格式不限劲装,回憶并復(fù)述是加強記憶的好方式!

  • 任務(wù):將文件(record.txt 下面我會用33.txt代替)中的數(shù)據(jù)進行分割并按照以下規(guī)律保存起來:
  • 小甲魚的對話單獨保存為boy_*.txt的文件(去掉“小甲魚:”)
  • 小客服的對話單獨保存為girl_*.txt的文件(去掉“小客服:”)
  • 文件中總共有三段對話,分別保存為boy_1.txt规丽,girl_1.txt称近,boy_2.txt,
    girl_2.txt谦疾,boy_3.txt,girl_3.txt共6個文件(提示:文件中的不同對話見已經(jīng)使用“=========”分割)

注意:我下面的環(huán)境是python 3.7 + Mac
代碼如下:

def save_file(boy, girl, count):
    file_name_boy = 'boy_' + str(count) + '.txt'
    file_name_girl = 'girl_' + str(count) + '.txt'

    boy_file = open('%s' % file_name_boy, 'w')
    girl_file = open('%s' % file_name_girl, 'w')

    boy_file.writelines(boy)
    girl_file.writelines(girl)

    boy_file.close()
    girl_file.close()


def split_file(file_name):
    f = open(file_name)
    boy = []
    girl = []
    count = 1

    for each_line in f:
        if each_line[:6] != '======':
            (role, line_spoken) = each_line.split(':', 1)
            if role == '小甲魚':
                boy.append(line_spoken)
            if role == '小客服':
                girl.append(line_spoken)
        else:
            save_file(boy, girl, count)
            count += 1
            boy = []
            girl = []

    save_file(boy, girl, count)
    f.close()


split_file('33.txt')

需要注意的幾點:
1址否、代碼中的中文字符:
(role,line_spoken) = each_line.split(':',1)
其中餐蔬,冒號應(yīng)該是中文輸入法下的':',否則會報錯
2佑附、直接在record.txt所在目錄下創(chuàng)建.py文件時樊诺,上述代碼中的打開文件操作可以直接用文件名而不需要指明路徑,即可以修改為:
f.open('record.txt')
上述兩個文件不在同一目錄下時音同,則應(yīng)指明路徑词爬。
3、上面這段代碼在Python 3.7下運行老是報錯:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 2: invalid start byte
原因大概就是編碼的問題权均,如果你要在mac上運行這個腳本的話顿膨,自己最好重新根據(jù)record.txt自己生成一個另外的文檔,因為小甲魚給的這個文檔的編碼方式或許在mac上不適用叽赊×滴郑可以自己新建一個文件,把record.txt內(nèi)的內(nèi)容復(fù)制過來即可必指。
33.txt [百度云鏈接:https://pan.baidu.com/s/1FRR95vuwtgnywKywuV8uCA]


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末囊咏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子塔橡,更是在濱河造成了極大的恐慌梅割,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葛家,死亡現(xiàn)場離奇詭異户辞,居然都是意外死亡,警方通過查閱死者的電腦和手機癞谒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門底燎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刃榨,“玉大人,你說我怎么就攤上這事书蚪±瑁” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵殊校,是天一觀的道長晴玖。 經(jīng)常有香客問我,道長为流,這世上最難降的妖魔是什么呕屎? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮敬察,結(jié)果婚禮上秀睛,老公的妹妹穿的比我還像新娘。我一直安慰自己莲祸,他們只是感情好蹂安,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锐帜,像睡著了一般田盈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缴阎,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天允瞧,我揣著相機與錄音,去河邊找鬼蛮拔。 笑死述暂,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的建炫。 我是一名探鬼主播畦韭,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼肛跌!你這毒婦竟也來了廊驼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤惋砂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绳锅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體西饵,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年鳞芙,在試婚紗的時候發(fā)現(xiàn)自己被綠了眷柔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片期虾。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖驯嘱,靈堂內(nèi)的尸體忽然破棺而出镶苞,到底是詐尸還是另有隱情,我是刑警寧澤鞠评,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布茂蚓,位于F島的核電站,受9級特大地震影響剃幌,放射性物質(zhì)發(fā)生泄漏聋涨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一负乡、第九天 我趴在偏房一處隱蔽的房頂上張望牍白。 院中可真熱鬧,春花似錦抖棘、人聲如沸茂腥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽最岗。三九已至,卻和暖如春数尿,著一層夾襖步出監(jiān)牢的瞬間仑性,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工右蹦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诊杆,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓何陆,卻偏偏與公主長得像晨汹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贷盲,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

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

  • 51.集合 >>> num={} >>> type(num) >>> num2={1,2,3,4,5} >>> t...
    楊大菲閱讀 666評論 0 1
  • 一淘这、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,744評論 0 10
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)巩剖,斷路器铝穷,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 我的目標:2018年6月30日前百分百輕松收獲100萬元以上。 種子計劃: 1.每天歡喜播種三大福田佳魔。 2.每天至...
    Panling0閱讀 152評論 0 1
  • 文/逗逗 圖/花瓣網(wǎng) 現(xiàn)在做公眾號寫文章的人越來越多鞠鲜,我身邊的朋友陸陸續(xù)續(xù)都去申請注冊了微信公眾號宁脊,想要把公眾號...
    遇見逗逗閱讀 962評論 6 11