鱼C论坛

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

[技术交流] python 029 对文件进行操作

[复制链接]
发表于 2018-6-25 12:40:57 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 风不会停息 于 2018-7-20 15:56 编辑

5个动动手程序:
def  file_write(file_name):
    f = open('python_study\\' + str(file_name) + '.txt', 'x')
    print("请输入内容【单独输入':w'保存退出】:  ")

    while  True:
        file_content = input( )
        if  file_content != ':w':
            f.write('%s\n' % file_content)
        else:
            break

    f.close()

file_name = input("请输入文件名: ")
file_write(file_name)
def  file_compare(file1, file2):
    f1 = open('python_study\\' + str(file1) + '.txt')
    f2 = open('python_study\\' + str(file2) + '.txt')
    count_line = 0
    count_char = 0
    differ_line = []
    differ_char = []

    for  each_line1 in f1:
        each_line2 = f2.readline()
        count_line += 1
        if  each_line1 != each_line2:
            differ_line.append(count_line)
            for  each_char in each_line1:
                count_char += 1
                if  each_char != each_line2[count_char - 1]:
                    differ_char.append(count_char)
                    break

            count_char = 0

    f1.close()
    f2.close()
    differ = [differ_line, differ_char]
    return differ


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

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

def  file_print(file, n):
    f = open('python_study\\' + str(file) + '.txt')
    count = 0
    
    for  each_line in f:
        if  count == n:
            break
        print(each_line)
        count += 1

    f.close()


file = input("请输入要打开的文件: ")
n = input("请输入需要显示该文件前几行: ")
while  not n.isdigit():
    n = input("输入格式错误, 请重新输入: ")
    
n = int(n)
file_print(file, n)

def  file_print(file, range_line):
    f = open('D:\\python\\python_study\\' + str(file) + '.txt')
    count = 0
    range_line = range_line.partition(':')
    
    length = len(range_line)
    
    
    if  range_line[0] != '' and range_line[2] != '':
        print('文件 %s 从第 %d 行到第 %d 行的内容如下: ' % ( file + '.txt', int(range_line[0]), int(range_line[2]) ) )
        for  each_line in range( int(range_line[0]) - 1 ):
            f.readline()
        for  each_line in f:
            if  count <= int( range_line[2] ) - int( range_line[0] ):
                print(each_line)
                count += 1
            else:
                break
    elif  range_line[0] == '' and range_line[2] != '':
        print('文件 %s 从第开始到第 %d 行的内容如下: ' % ( file + '.txt', int(range_line[2]) ) )     
        for  each_line in f:
            if  count == int (range_line[2] ):
                break
            else:
                print(each_line)
                count += 1
    elif  range_line[2] == '' and range_line[0] != '':
        print('文件 %s 从第 %d 行到末尾的内容如下: ' % ( file + '.txt', int(range_line[0]) ) )
        for  each_line in range( int(range_line[0]) - 1 ):
            f.readline()
        for  each_line in f:
            print(each_line)
    elif  length == 3 and range_line[0] == '' and range_line[2] == '':
        print('文件 %s 全文的内容如下: ' % ( file + '.txt' ) )
        for  each_line in f:
              count += 1
              print(each_line)
    f.close()

file = input("请输入要打开的文件: ")
range_line = input("请输入需要显示的格式【格式如 13:21 或 :21 或 21:】: ")
file_print(file, range_line)

def  file_replace(file, old, new):
    f = open('D:\\python\\python_study\\' + str(file) + '.txt')
    count = 0
    content = []
    
    for  each_line in f:
        count += each_line.count(old)
        each_line = each_line.replace(old, new)
        content.append(each_line)
    print("文件 %s 中共有 %d 个 【%s】" % (file + '.txt', count, old) )
    print("您确定要把所有的 【%s】 替换为 【%s】 吗?" % ( old, new ) )
    judge = input('【YES/NO】: ')

    if  judge == 'YES':
        f_write = open('D:\\python\\python_study\\' + str(file) + '.txt', 'w')
        f_write.writelines(content)
        f_write.close()

    f.close()


file = input("请输入文件名: ")
old = input("请输入需要替换的单词或字符: ")
new = input("请输入新的单词或字符: ")
file_replace(file, old, new)

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-14 20:07:02 | 显示全部楼层
兄dei,感谢你无私的分享。
第二个动手做一做程序运行时,发现了两个小错误,
(1)count_char 在循环后为初始化,导致了IndexError: string index out of range。改正后代码如下
  for  each_line1 in f1:
        each_line2 = f2.readline()        #以第一行为例,f1的第一行读入,f2的第一行也写入
        count_line += 1
        if  each_line1 != each_line2:     #如果两行不一样,则把行号添加到列表line中
            differ_line.append(count_line)
            for  each_char in each_line1:   #对于第一行的每个字母遍历,
                count_char += 1      #字母个数计数
                if  each_char != each_line2[count_char - 1]:  #字母不一致时,把字母序号加到列表char中
                    differ_char.append(count_char)
                    break
            count_char=0
         
(2)最后I遍历输出时,长度未减一导致了IndexError: string index out of range。改正后代码如下
differ = file_compare(file1, file2)
length = len(differ[0])
if  length == 0:
    print('两个文件一样')
else:
    print('这两个文件共有 %d 行不同' % length)
    for  each in range(length-1):
        print( '第 %d 行, 第 %d 个字符开始不一样' % (differ[0][each], differ[1][each]) )
希望可以共同进步
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-20 15:28:19 | 显示全部楼层
本帖最后由 风不会停息 于 2018-7-20 15:52 编辑
高渐飞 发表于 2018-7-14 20:07
兄dei,感谢你无私的分享。
第二个动手做一做程序运行时,发现了两个小错误,
(1)count_char 在循环后为 ...


已经发现这个问题了, 第一个我确实忘了初始化, 感谢你的指正, 第二个应该不用length - 1 吧, range(length)的长度和length是一样的, 应该是不会越界的, 在我电脑上执行时没问题的, 因为这几天考试没来及上鱼吧,就没有来得及回复你,帖子中的代码已经更新, 谢谢了,希望能一起进步
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 18:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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