小甲魚《零基礎學習Python》課後筆記(二十九):檔案——一個任務
阿新 • • 發佈:2019-02-06
動動手
0.編寫一個程式,接受使用者的輸入並儲存為新的檔案,程式實現如圖:
程式碼如下:
f_name = input('請輸入檔名:')
f = open(f_name, 'wt')
print("請輸入內容【單獨輸入':w'儲存退出】:")
str1 = input()
while str1 != ':w':
f.write('%s\n' % str1)
str1 = input()
f.close()
演示程式碼:
>>>
================== RESTART: I:\Python\小甲魚\test003\test0. py ==================
請輸入檔名:something.txt
請輸入內容【單獨輸入':w'儲存退出】:
從明天起,做一個幸福的人
餵馬、劈柴,周遊世界
從明天起,關心糧食和蔬菜
我有一所房子,面朝大海,春暖花開
:w
1.編寫一個程式,比較使用者輸入的兩個檔案,如果不同,顯示所有不同處的行號與第一個不同字元的位置,程式實現如圖:
程式碼如下:
list1 = []
diff_count = 0
count = 0
file1_line_count = 0
file2_line_count = 0
f_name1 = input('請輸入需要比較的頭一個檔名:' )
f_name2 = input('請輸入需要比較的另一個檔名:')
file1 = open(f_name1, 'rt')
file2 = open(f_name2, 'rt')
for file1_line in file1:
file1_line_count += 1
for file2_line in file2:
file2_line_count += 1
file1.seek(0,0)
file2.seek(0,0)
if file1_line_count > file2_line_count:
for file1_line in file1:
count += 1
file2_line = file2.readline()
if file1_line != file2_line:
diff_count += 1
list1.append(count)
else:
for file2_line in file2:
count += 1
file1_line = file1.readline()
if file2_line != file1_line:
diff_count += 1
list1.append(count)
if diff_count == 0:
print('兩個檔案完全相同')
else:
print('兩個檔案共有【%d】處不同:' %diff_count)
for each in list1:
print('第%d行不一樣' %each)
測試結果如下,相對原來的程式碼,主要是解決了如果檔案一和檔案二前幾行一致,而後幾行不一致,而且檔案二比檔案一長,如下
檔案一(我.txt):
從明天起,做一個幸福的人
餵馬、劈柴,周遊世界
從明天起,關心糧食和蔬菜
我有一所房子,面朝大海,春暖花開
檔案二(something.txt):
從明天起,做一個幸福的人
餵馬、劈柴,周遊世界
從明天起,關心糧食和蔬菜
我有一所房子,面朝小海,春暖花開
你是
啥
是
注:此處something.txt是經過第4題的修改的,是“面朝小海”
原始程式會認為兩個檔案一樣,修改後測試結果如下:
================== RESTART: I:\Python\小甲魚\test003\test0.py ==================
請輸入需要比較的頭一個檔名:我.txt
請輸入需要比較的另一個檔名:something.txt
兩個檔案共有【4】處不同:
第4行不一樣
第5行不一樣
第6行不一樣
第7行不一樣
================== RESTART: I:\Python\小甲魚\test003\test0.py ==================
請輸入需要比較的頭一個檔名:something.txt
請輸入需要比較的另一個檔名:我.txt
兩個檔案共有【4】處不同:
第4行不一樣
第5行不一樣
第6行不一樣
第7行不一樣
2.編寫一個程式,當用戶輸入檔名和行數(N)後,將該檔案的前N行中內容列印到螢幕上,程式實現如圖:
程式碼如下:
input_showlines_flag = 1 #顯示行數是否超過檔案行數標誌位
file_lines_count = 0
file_name = input('請輸入要開啟的檔案(C:\\test.txt):')
file = open(file_name, 'rt')
show_lines_count = int(input('請輸入需要顯示該檔案前幾行:'))
for each_line in file:
file_lines_count += 1
while input_showlines_flag:
if show_lines_count > file_lines_count:
print('檔案只有%d行' % (file_lines_count))
show_lines_count = int(input('請重新輸入行數:'))
else:
file.seek(0,0) #由於for each_line in file時函式指標已指到最後一位,所以要指回首位
print('檔案%s的前%d行的內容如下:' % (file_name, show_lines_count))
print()
while show_lines_count:
show_lines = file.readline()
print(show_lines)
show_lines_count -= 1
break
print('===================================================')
演示效果:
>>>
================== RESTART: I:\Python\小甲魚\test003\test0.py ==================
請輸入要開啟的檔案(C:\test.txt):something.txt
請輸入需要顯示該檔案前幾行:6
檔案只有4行
請重新輸入行數:6
檔案只有4行
請重新輸入行數:6
檔案只有4行
請重新輸入行數:3
檔案something.txt的前3行的內容如下:
從明天起,做一個幸福的人
餵馬、劈柴,周遊世界
從明天起,關心糧食和蔬菜
===================================================
3.呃,不得不說我們的使用者越來越來刁鑽了。要求在上一題的基礎上擴充套件,使用者可以隨意輸入需要顯示的行數。(如輸入13:21列印13行到21行,輸入:21列印前21行,輸入21:就列印從21行開始到檔案結尾左右內容)
程式碼如下:
file_lines_count = 0
file_name = input('請輸入要開啟的檔案(C:\\test.txt):')
file = open(file_name, 'rt')
show_lines_count = input('請輸入需要顯示該檔案的行數【格式如 13:21 或 :21 或 21:】:')
if show_lines_count.strip() == ':':
begin = 1
end = -1
(begin, end) = show_lines_count.split(':')
if begin == '':
begin = 1
if end == '':
end = -1
begin = int(begin)
end = int(end)
if begin == 1 and end == -1:
print('檔案%s的全文的內容如下:' % file_name)
for each_line in file:
print(each_line, end = '')
elif begin == 1 and end != -1:
print('檔案%s從開始到第%d行的內容如下:' % (file_name, end))
while end:
show_lines = file.readline()
print(show_lines, end = '')
end -= 1
elif begin != 1 and end == -1:
print('檔案%s從第%d行到結尾的內容如下:' % (file_name, begin))
while begin:
not_show_lines = file.readline()
begin -= 1
show_lines = file.read()
print(show_lines, end = '')
else:
print('檔案%s從第%d行到第%d行的內容如下:' % (file_name, begin, end))
while begin:
not_show_lines = file.readline()
begin -= 1
for x in range(end - begin + 1):
show_lines = file.readline()
print(show_lines, end = '')
file.close()
4.編寫一個程式,實現“全部替換”功能,程式實現如圖
程式碼如下:
list1 = []
old_words_number = 0
file_name = input('請輸入檔名:')
file = open(file_name, 'rt')
old_words = input('請輸入需要替換的單詞或字元:')
new_words = input('請輸入新的單詞或字元:')
for each_line in file:
if old_words in each_line:
old_words_number = each_line.count(old_words)
each_line = each_line.replace(old_words, new_words)
list1.append(each_line)
print('檔案%s中共有%d個【%s】' % (file_name, old_words_number, old_words))
print('您確定要把所有的【%s】替換為【%s】嗎?' % (old_words, new_words))
flag = input('【YES/NO】:')
if flag.upper() == 'YES':
file_write = open(file_name, 'wt')
file_write.writelines(list1)
file_write.close()
else:
print('檔案%s未更改!' % file_name)
file.close()
演示效果:
================== RESTART: I:\Python\小甲魚\test003\test0.py ==================
請輸入檔名:something.txt
請輸入需要替換的單詞或字元:大
請輸入新的單詞或字元:小
檔案something.txt中共有1個【大】
您確定要把所有的【大】替換為【小】嗎?
【YES/NO】:yes
文件修改前如下:
從明天起,做一個幸福的人
餵馬、劈柴,周遊世界
從明天起,關心糧食和蔬菜
我有一所房子,面朝大海,春暖花開
文件修改後:
從明天起,做一個幸福的人
餵馬、劈柴,周遊世界
從明天起,關心糧食和蔬菜
我有一所房子,面朝小海,春暖花開