小甲鱼《零基础学习Python》课后笔记(二十九):文件——一个任务

动动手
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.编写一个程序,比较用户输入的两个文件,如果不同,显示所有不同处的行号与第一个不同字符的位置,程序实现如图: ![](https://img-blog.csdn.net/20180823230004935?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI0NTQ2MTM3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 代码如下: ```python 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)

<font face='黑体' size=4>测试结果如下,相对原来的代码,主要是解决了如果文件一和文件二前几行一致,而后几行不一致,而且文件二比文件一长,如下</font>
<font face='黑体' color=blue size=3>
文件一(我.txt):
从明天起,做一个幸福的人
喂马、劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海,春暖花开</font>
<font face='黑体' color=blue size=3>
文件二(something.txt):
从明天起,做一个幸福的人
喂马、劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝小海,春暖花开
你是
啥
是
</font><font face='黑体' color=red size=3>注:此处something.txt是经过第4题的修改的,是“面朝小海”</font>
<font face='黑体' size=4>原始程序会认为两个文件一样,修改后测试结果如下:</font>

```python
================== 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行中内容打印到屏幕上,程序实现如图: ![](https://img-blog.csdn.net/20180823230024793?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI0NTQ2MTM3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 代码如下: ```python 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(’===================================================’)

<font face='黑体' size=4>演示效果:</font>

```python
>>>   
================== 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行开始到文件结尾左右内容) ![](https://img-blog.csdn.net/20180823230033666?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI0NTQ2MTM3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) ![](https://img-blog.csdn.net/2018082323022599?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI0NTQ2MTM3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 代码如下: ```python 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()


<font face='黑体' color=blue size=4>
4.编写一个程序,实现“全部替换”功能,程序实现如图</font>
 ![](https://img-blog.csdn.net/20180823230104184?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI0NTQ2MTM3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)![](https://img-blog.csdn.net/2018082323011215?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI0NTQ2MTM3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
 <font face='黑体' size=4>代码如下:</font>
```python
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 

文档修改前如下:
从明天起,做一个幸福的人
喂马、劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝大海,春暖花开

文档修改后:
从明天起,做一个幸福的人
喂马、劈柴,周游世界
从明天起,关心粮食和蔬菜
我有一所房子,面朝小海,春暖花开

猜你喜欢

转载自blog.csdn.net/qq_24546137/article/details/81989621
今日推荐