高渐飞 发表于 2018-7-14 12:39:30

A-13-文件操作练习

本帖最后由 高渐飞 于 2018-7-16 15:17 编辑

昨天一时兴起,去搭了个个人博客。http://139.224.12.201/
24K纯白的建站小白,若丑勿怪,域名审核是真的伤({:5_104:} )
附上今天的练习
#coding: UTF-8

#知识点总结

#(1)python操作文件,详细打开方式和操作方法见 http://bbs.fishc.org/thread-45279-1-1.html(类似C)
#(2)打开文件后要关闭, 关闭后才能将缓存的内容写进磁盘,不会丢失
#(3)关于扩展名

#操作练习

#1.打开文件,并迭代打印文件对象(f)每一行的数据
a = open('E:\\test\\text.txt','r')#文件路径和打开方式都要加引号
for each_line1 in a:
    print(each_line1,end=" ")
a.close()      #打开后,记得关闭


#2.将对话分别分割并保存
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)   #以冒号为界限分割1条符串,详见
            if role == '小甲鱼':         #如果冒号前面的内容为“小甲鱼”,则把后面的内容添加到boy列表
                boy.append(line_spoken)
            if role == '小客服':
                girl.append(line_spoken)
      else:                           #第count段内容已全部添加完毕,开始保存
            save_file(boy, girl, count)

            boy = []                   #列表初始化,准备下一次分割、保存
            girl = []
            count += 1

    save_file(boy, girl, count)      #第三段文字后,无====,因此只进行了分割,未保存。此处进行保存操作

    f.close()         #分割保存完毕,关闭文件

def save_file(boy, girl, count):    #保存文件
    file_name_boy = 'boy_' + str(count) + '.txt'   #设置保存文件的名称
    file_name_girl = 'girl_' + str(count) + '.txt'

    boy_file = open(file_name_boy, 'w')          #打开文件
    girl_file = open(file_name_girl, 'w')

    boy_file.writelines(boy)          #将列表boy(前面已完成添加)写入boy_file指向的文件
    girl_file.writelines(girl)      #文件对象操作的详细文档见 http://bbs.fishc.org/thread-45279-1-1.html

    boy_file.close()
    girl_file.close()

#调用函数,分割保存
split_file('E:\\test\\record.txt')


#3.替换文件内字符串
deffile_replace(file1, old1, new1):
    f = open('E:\\test\\' + str(file1) + '.txt')   #设定文件夹路径,只输入文件名即可打开指定文件夹下的文件
    count = 0               #统计要替换的字符串个数
    content = []

    foreach_line in f:
      count += each_line.count(old1)
      each_line = each_line.replace(old1, new1)
      content.append(each_line)
    print("文件 %s 中共有 %d 个 【%s】" % (file + '.txt', count, old1) )
    print("您确定要把所有的 【%s】 替换为 【%s】 吗?" % ( old1, new1 ) )    #输出格式原来是这样啊,学习了(笑)
    judge = input('【YES/NO】: ')

    ifjudge == 'YES':
      f_write = open('E:\\test\\' + str(file1) + '.txt', 'w')
      f_write.writelines(content)
      print("文件 %s 中的【%s】已被替换为【%s】" % (file + '.txt',old1,new1) )
      f_write.close()

    f.close()

#调用函数,开始修改
file = input("请输入文件名:")
old = input("请输入需要替换的单词或字符:")
new = input("请输入新的单词或字符:")

file_replace(file, old, new)


#4.比较用户输入的两个文件 如果不同,显示出所有不同处的行号与第一个不同字符的位置
deffile_compare(file1, file2):
    f1 = open('E:\\test\\' + str(file1) + '.txt')
    f2 = open('E:\\test\\' + str(file2) + '.txt')
    count_line = 0
    count_char = 0
    differ_line = []
    differ_char = []

    foreach_line1 in f1:
      each_line2 = f2.readline()      #以第一行为例,f1的第一行读入,f2的第一行也写入
      count_line += 1
      ifeach_line1 != each_line2:   #如果两行不一样,则把行号添加到列表line中
            differ_line.append(count_line)
            foreach_char in each_line1:   #对于第一行的每个字母遍历,
                count_char += 1      #字母个数计数
                ifeach_char != each_line2:#字母不一致时,把字母序号加到列表char中
                  differ_char.append(count_char)
                  break
            count_char=0


    f1.close()
    f2.close()
    differ =     #列表嵌套列表,如[,]
    return differ


file1 = input('请输入需要比较的第一个文件名: ')
file2 = input('请输入需要比较的第二个文件名: ')

differ = file_compare(file1, file2)
length = len(differ)
iflength == 0:
    print('两个文件一样')
else:
    print('这两个文件共有 %d 行不同' % length)
    foreach in range(length-1):
      print( '第 %d 行, 第 %d 个字符开始不一样' % (differ, differ) )


#5.编写程序,接受用户的输入并保存为新的文件
deffile_write(file_name4):
    f = open('E:\\test\\' + str(file_name4) + '.txt', 'x')    #以x形式打开不存在的文件,即新建文件
    print("请输入内容【单独输入':w'保存退出】:")

    whileTrue:
      file_content = input( )
      iffile_content != ':w':
            f.write('%s\n' % file_content)   #将输入的内容写入打开的文件
      else:
            break

    f.close()

file_name = input("请输入文件名: ")
file_write(file_name)

#6.指定显示文件的前几行
deffile_print(file, n):
    f = open('E:\\test\\' + str(file) + '.txt')   #打开文件
    count = 0

    foreach_line in f:
      ifcount == n:      #输出前n行
            break
      print(each_line)
      count += 1

    f.close()


file = input("请输入要打开的文件: ")
n = input("请输入需要显示该文件前几行: ")
whilenot n.isdigit():                  # n.isdigit检查n是否只是整数,是返回True,退出循环
    n = input("输入格式错误, 请重新输入: ")
n=int(n)
file_print(file, n)

#7.用户可以随意输入需要显示的行数
deffile_print(file, range_line):
    f = open('E:\\test\\' + str(file) + '.txt')
    count = 0
    range_line = range_line.partition(':')#分割成三部分,类似split分成两部分
                                          #比如"12:25",分割后成'12','.','25'三部分
    length = len(range_line)                #http://www.runoob.com/python/att-string-partition.html


    ifrange_line != '' and range_line != '':
      print('文件 %s 从第 %d 行到第 %d 行的内容如下: ' % ( file + '.txt', int(range_line), int(range_line) ) )
      foreach_line in range( int(range_line) - 1 ):   #12-1=11,range(11)为0-11遍历
            f.readline()                      #使指针指向range_line起始点,便于输出
      foreach_line in f:
            ifcount <= int( range_line ) - int( range_line ):   #count <= 25-12 输出
                print(each_line)
                count += 1
            else:
                break
    elifrange_line == '' and range_line != '':
      print('文件 %s 从第开始到第 %d 行的内容如下: ' % ( file + '.txt', int(range_line) ) )
      foreach_line in f:
            ifcount < int (range_line ):   #从开始输出,省略指针跳转
                print(each_line)
                count += 1
            else:
                break
    elifrange_line == '' and range_line != '':
      print('文件 %s 从第 %d 行到末尾的内容如下: ' % ( file + '.txt', int(range_line) ) )
      foreach_line in range( int(range_line) - 1 ):
            f.readline()
      foreach_line in f:
            print(each_line)
    eliflength == 3 and range_line == '' and range_line == '':
      print('文件 %s 全文的内容如下: ' % ( file + '.txt' ) )
      foreach_line in f:
            #count += 1
            print(each_line)
    f.close()

file = input("请输入要打开的文件: ")
range_line = input("请输入需要显示的格式【格式如 13:21 或 :21 或 21:】: ")
file_print(file, range_line)
页: [1]
查看完整版本: A-13-文件操作练习