鱼C论坛

 找回密码
 立即注册
查看: 2291|回复: 2

[技术交流] 029讲:文件:一个任务——【课后习题】笔记

[复制链接]
发表于 2018-12-10 00:01:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 胖豆lucky 于 2018-12-11 14:01 编辑

第0题:编写一个程序,接受用户的输入并保存为新的文件。

  1. def file_write(file_name):
  2.     f = open(file_name,'w')                     #①这里不能写成'D:\\file_name',不然文件名字就改不了了!
  3.     print("请输入内容【单独输入':w'保存退出】:")

  4.     while True:
  5.         content = input("")
  6.         if content != ":w":      
  7.             f.write('%s\n'  %  content)        #②换行以及格式化字符串的用法
  8.         else:
  9.             break
  10.             
  11.     f.close()                      #③涉及到写关于文件的代码一开始就把close()写上以防忘记

  12. file_name = input("请输入文件名:")
  13. file_write(file_name)
复制代码


知识点:
1.关于换行\n
2.格式化字符串用法(思路:字符串→相关用法)


第1题:编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置。

  1. def file_compare(file_name1,file_name2):
  2.     f1 = open(file_name1)
  3.     f2 = open(file_name2)

  4.     count = 0
  5.     differ = []

  6.     for line1 in f1:
  7.         line2 = f2.readline()
  8.         count += 1
  9.         if line1 != line2:
  10.             differ.append(count)

  11.     f1.close()
  12.     f2.close()
  13.     return differ #①

  14. file_name1 = input("请输入需要比较的头一个文件名:")
  15. file_name2 = input("请输入需要比较的另一个文件名:")

  16. differ = file_compare(file_name1,file_name2) #②

  17. length = len(differ)

  18. if length == 0:
  19.     print("两个文件完全一样")
  20. else:
  21.     print("两个文件共有【%d】处不同:" % length)
  22.     for i in differ:
  23.         print("第 %d 行不一样" % i)
复制代码


知识点:
1. readline()是一行“接着”一行的读取的,别忘了指针这个东西!

2.①②处,返回值

3.计数的另一种方法:利用 list.append()


第2题:编写一个程序,当用户输入文件名和行数(N)后,将该文件的前N行内容打印到屏幕上。

我的方法:
  1. def file_print(file_name,number):
  2.     f = open(file_name)
  3.     print("\n文件" + file_name + "的前" + number +"行的内容如下:\n")

  4.     count = 0
  5.     while int(count) < int(number):
  6.         print(f.readline(),end='')           #f.readline()需要输出
  7.         count +=1

  8.     f.close()      
  9.    
  10. file_name = input("请输入要打开的文件:")
  11. number = input("请输入需要显示该文件前几行:")
  12. file_print(file_name,number)
复制代码


JY的方法:
  1. def file_view(file_name, line_num):
  2.     print('\n文件%s的前%s的内容如下:\n' % (file_name, line_num))
  3.     f = open(file_name)
  4.     for i in range(int(line_num)):
  5.         print(f.readline(), end= '')

  6.     f.close()

  7. file_name = input(r'请输入要打开的文件(C:\\test.txt):')
  8. line_num = input('请输入需要显示该文件前几行:')
  9. file_view(file_name, line_num)
复制代码


知识点:f.readline()


第3题:要求在上一题的基础上扩展,用户可以随意输入需要显示的行数。

这里的复杂性在于有“开始”,“末尾”,“全文”等字眼,所以设了begin=‘1’,end=‘-1’,之所以设成字符串,是因为在输出的时候需是字符串。

  1. def file_print(file_name,number):
  2.     if number.strip() == ":":
  3.         begin = '1'
  4.         end = '-1'    #为了全文
  5.         
  6.     (begin,end)=number.split(":",1)                   #先想到要把它拆分开来→字符串→字符串的方法有一个split()

  7.     if begin == "":
  8.         begin = '1'
  9.     if end == "":
  10.         end = '-1'

  11.     if begin == '1':
  12.         print("\n文件%s从开始到第%s行的内容如下:\n" % (file_name,end))
  13.     if end == '-1':
  14.         print("\n文件%s从第%s到末尾的内容如下:\n" % (file_name,begin))
  15.     if (begin != '1') and (end != '-1'):
  16.         print("\n文件%s从第%s行到第%s行的内容如下:\n" % (file_name,begin,end))
  17.     if (begin == '1') and (end == '-1'):
  18.         print("\n文件的全文的内容如下:\n" % (file_name))

  19.     begin = int(begin)-1
  20.     end = int(end)
  21.     length = end - begin

  22.     f=open(file_name)

  23.     for i in range(begin):
  24.         f.readline()  #把前面的几次读取完,使指针指向这里

  25.     if length > 0:
  26.         for i in range(length):
  27.             print(f.readline(),end='')
  28.     else:
  29.         print(f.read())


  30.     f.close() #先写好close()
  31. #难点在于行数不好算,因为有结束、开始、全部这种词语,得把它们数量化才可以

  32. file_name = input("请输入要打开的文件:")
  33. number = input("请输入需要显示的行数【格式如13:21或:21或21:】:")
  34. file_print(file_name,number)


复制代码







未解决问题:第4题+视频
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-1-5 01:17:22 | 显示全部楼层
老师,为什么第一题的比较里, ‘’for line1 in f1‘’, 没有定义line1,Python就能直接把f2里读出来的每一行和f1里每一行进行比较啊,他怎么知道这个line1是一行啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 00:00:28 | 显示全部楼层
XJC33 发表于 2019-1-5 01:17
老师,为什么第一题的比较里, ‘’for line1 in f1‘’, 没有定义line1,Python就能直接把f2里读出来的每 ...

我也为这个问题请教过,答案是用for语句循环文件的话,是一行一行读的,所以可以和f2的readline比较。

用for语句循环字符串的话是一个字符一个字符读的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-14 08:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表