找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 302|回复: 4

[求助] 关于文件重命名求助

2

主题

6

帖子

6

积分

贫民

积分
6
sxPython 发表于 2019-8-14 15:31:39 | 显示全部楼层 |阅读模式
题目:现有一个文本文件,其内容是每行包含一名学员的序号、姓名、身份证号、家庭地址,并且以一个空格分开,而pho文件夹下有以身份证号命名的个人照片,但其中的照片很多,也有可能某学员没有照片。请编程实现将这个文本文件中所包含的学员的照片重新命名为学员姓名,以便检出并排序。
说明:因为是测试,所以身份证号我改为序号代替。

import os
import fileinput

filenames = [ ]

def subject_2(a,b):
    all_files = os.listdir('pho')
    ilen = len(all_files)
    for i in all_files[0:ilen]:
        print('a: ', a)
        print('i:', i)        
        if i == a:
            try:
                os.rename(i, b)               
            except FileNotFoundError:
                print('文件没有找到')
            break   

def subject_1():
    with fileinput.input(['info.txt']) as lines:  #读取文本文件信息
        for line in lines:
            s = line.strip()
            #字符串转成列表:序号、姓名、身份证号、家庭地址
            b = s.split(' ')
            ilen = len(b)
            s1 = ''.join(b[1:2]) + '.jpg'            
            s2 = ''.join(b[2:3]) + '.jpg'
            subject_2(s2, s1)
                                   
if __name__ == '__main__':
    subject_1()

F5后显示:
a:  1001.jpg
i: 1001.jpg
文件没有找到
a:  1002.jpg
i: 1001.jpg
a:  1002.jpg
i: 1002.jpg
文件没有找到
a:  1003.jpg
i: 1001.jpg
a:  1003.jpg
i: 1002.jpg
a:  1003.jpg
i: 1003.jpg
文件没有找到

。。。。。

原因我猜是a和i不同类型,虽然看起来长的一样,但是不知道怎么改,所以求助,谢谢!








回复

使用道具 举报

0

主题

18

帖子

18

积分

贫民

积分
18
wengboyu 发表于 2019-8-14 20:57:30 | 显示全部楼层
你这个严重影响效率 而且必然有文件没有找到
因为你subject_1里面用for循环调用subject_2
意思是不管每行数据都要去pho文件夹下和每个文件比对一遍
给你个思路
用set把pho下文件名记录下来
遍历一遍info.txt的每一行
如果身份证号 in set
就重命名 不然continue
回复 支持 反对

使用道具 举报

0

主题

18

帖子

18

积分

贫民

积分
18
wengboyu 发表于 2019-8-14 21:31:22 | 显示全部楼层
闲着无聊 帮你写了下

import os, re

def rename_file():
    files = os.listdir('pho')
    file_set = set(files)

    with open('info.txt') as fileobj:                                   
        for line in fileobj.readlines():
            line_list = re.split(' +', line)
            id_str = line_list[1] + '.jpg'
            name_str = line_list[2] + '.jpg'
            print('name is {}'.format(id_str))
            if id_str in file_set:
                os.rename('pho' + os.sep + id_str, 'pho' + os.sep + name_str)
回复 支持 反对

使用道具 举报

2

主题

6

帖子

6

积分

贫民

积分
6
sxPython  楼主| 发表于 2019-8-15 08:51:39 | 显示全部楼层
本帖最后由 sxPython 于 2019-8-15 08:56 编辑
wengboyu 发表于 2019-8-14 20:57
你这个严重影响效率 而且必然有文件没有找到
因为你subject_1里面用for循环调用subject_2
意思是不管每行数 ...

嗯,这个解题思路有些欠缺,新手,学习中,所以写的时候只是考虑怎么用Python语言来解决问题。谢谢!
回复 支持 反对

使用道具 举报

2

主题

6

帖子

6

积分

贫民

积分
6
sxPython  楼主| 发表于 2019-8-15 08:55:17 | 显示全部楼层
wengboyu 发表于 2019-8-14 21:31
闲着无聊 帮你写了下

import os, re

非常感谢,这题我想了2天都没解决。
回复 支持 反对

使用道具 举报

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

本版积分规则

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