逐行重命名为fi

2024-06-28 12:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我输入,我的文件中有以下几行。你知道吗

...
VOAUT0000001712_19774.JPG   FRYW-1712-19774.jpg eab516afc1aaa10ad23edb5c15ae4ea4    1712    01

VOAUT0000001712_19775.JPG   FRYW-1712-19775.jpg 2715ceba8fd5c69b4ca6952e942a1a8a    1712    02 

VOAUT0000001712_19776.JPG   FRYW-1712-19776.jpg b1a0c4ec6160da3511e23c617517ff6f    1712    03 

VOAUT0000001713_19795.JPG   FRYW-1713-19795.jpg 56cd173c6e9436b19d39de214669cc53    1713    01 

VOAUT0000001713_19796.JPG   FRYW-1713-19796.jpg 271aa1b9ef2ac39c502a270c82b31fa3    1713    02 

VOAUT0000001713_19797.JPG   FRYW-1713-19797.jpg 667732a85660bebec168bc46b884d9b7    1713    03 

VOAUT0000001714_19763.JPG   FRYW-1714-19763.jpg d37770d6cde5639ce5db4e6a436498a8    1714    01 

VOAUT0000001714_19764.JPG   FRYW-1714-19764.jpg ce891ca4d4ea59c3a312a468bb0d4408    1714    02

VOAUT0000001714_19765.JPG   FRYW-1714-19765.jpg bd7fed521fe3997bf5c879d9d5ce942d    1714    03
...

我想一行一行地修改我的文件以便

17124615_01_hd.jpg  /opt/AutoPrivilege/client/photos/FRYW-1712-19774.jpg    eab516afc1aaa10ad23edb5c15ae4ea4

17124615_02_hd.jpg  /opt/AutoPrivilege/client/photos/FRYW-1712-19775.jpg    2715ceba8fd5c69b4ca6952e942a1a8a

17124615_03_hd.jpg  /opt/AutoPrivilege/client/photos/FRYW-1712-19776.jpg    b1a0c4ec6160da3511e23c617517ff6f 

17134615_01_hd.jpg  /opt/AutoPrivilege/client/photos/FRYW-1713-19795.jpg    56cd173c6e9436b19d39de214669cc53 

17134615_02_hd.jpg  /opt/AutoPrivilege/client/photos/FRYW-1713-19796.jpg    271aa1b9ef2ac39c502a270c82b31fa3

17134615_03_hd.jpg  /opt/AutoPrivilege/client/photos/FRYW-1713-19797.jpg    667732a85660bebec168bc46b884d9b7 

17144615_01_hd.jpg  /opt/AutoPrivilege/client/photos/FRYW-1714-19763.jpg    d37770d6cde5639ce5db4e6a436498a8 

17144615_02_hd.jpg  /opt/AutoPrivilege/client/photos/FRYW-1714-19764.jpg    ce891ca4d4ea59c3a312a468bb0d4408

17144615_03_hd.jpg  /opt/AutoPrivilege/client/photos/FRYW-1714-19765.jpg    bd7fed521fe3997bf5c879d9d5ce942d

以下是我的代码的开头:

def renameLineByLine():
    with open('/opt/data/photos.txt') as f:
        for line in f:
            newname, file, path, checksum = line.split()
            if ..?? :
                try:
                    rename(...???)
                except OSError:
                    logger.error('Got a problem')

但是我不知道如何用新的格式重命名每一行。。?你知道吗


Tags: 文件clientjpgopthdphotoseab516afc1aaa10ad23edb5c15ae4ea4b1a0c4ec6160da3511e23c617517ff6f
3条回答

已经提供了生成行所需的所有信息。感谢@SebastianHöffner指出了显而易见的问题。你知道吗

out = open('output.txt','w')

for line in open('data.txt'):
    if len(line) != 1:
        a, b, c, d, e = line.split()
        l = d + '4615_'+ e + '_hd.jpg /opt/AutoPrivilege/client/photos/' + b + '  '+ c     
        out.write(l + '\n')
    else:
        out.write('\n')

out.close()

您需要正确地读入文件:跳过空行并拆分为正确的值。没有path在那里你期望一个,而你不考虑最后的两个数字,这对转换是至关重要的。你知道吗

在这里,我只需将所有新格式化的行写入一个新文件photos_new.txt。我希望这能让你开始。你知道吗

但是请注意,您的方法名renameLineByLine以及try/except似乎暗示您还希望对图片进行移动/重命名/处理。如果是这样的话,这个答案将是不够的,你应该试着详细一点。你知道吗

def renameLineByLine():
    new_lines = []
    path = '/opt/AutoPrivilege/client/photos/'
    with open('/opt/data/photos.txt', 'r') as fin, \ 
        open('/opt/data/photos_new.txt', 'w') as fout:
        for line in fin:
            if len(line) != 1:
                newname, file, checksum, no1, no2 = line.split()
                fout.write(" ".join([
                    "{}4615_{}_hd.jpg".format(no1, no2),
                    path + file, checksum, '\n'])
                )
            else:
                fout.write('\n')

输入:

VOAUT0000001712_19774.JPG   FRYW-1712-19774.jpg eab516afc1aaa10ad23edb5c15ae4ea4    1712    01

VOAUT0000001712_19775.JPG   FRYW-1712-19775.jpg 2715ceba8fd5c69b4ca6952e942a1a8a    1712    02 

VOAUT0000001712_19776.JPG   FRYW-1712-19776.jpg b1a0c4ec6160da3511e23c617517ff6f    1712    03 

VOAUT0000001713_19795.JPG   FRYW-1713-19795.jpg 56cd173c6e9436b19d39de214669cc53    1713    01 

VOAUT0000001713_19796.JPG   FRYW-1713-19796.jpg 271aa1b9ef2ac39c502a270c82b31fa3    1713    02 

VOAUT0000001713_19797.JPG   FRYW-1713-19797.jpg 667732a85660bebec168bc46b884d9b7    1713    03 

VOAUT0000001714_19763.JPG   FRYW-1714-19763.jpg d37770d6cde5639ce5db4e6a436498a8    1714    01 

VOAUT0000001714_19764.JPG   FRYW-1714-19764.jpg ce891ca4d4ea59c3a312a468bb0d4408    1714    02

VOAUT0000001714_19765.JPG   FRYW-1714-19765.jpg bd7fed521fe3997bf5c879d9d5ce942d    1714    03

输出:

17124615_01_hd.jpg /opt/AutoPrivilege/client/photos/FRYW-1712-19774.jpg eab516afc1aaa10ad23edb5c15ae4ea4 

17124615_02_hd.jpg /opt/AutoPrivilege/client/photos/FRYW-1712-19775.jpg 2715ceba8fd5c69b4ca6952e942a1a8a 

17124615_03_hd.jpg /opt/AutoPrivilege/client/photos/FRYW-1712-19776.jpg b1a0c4ec6160da3511e23c617517ff6f 

17134615_01_hd.jpg /opt/AutoPrivilege/client/photos/FRYW-1713-19795.jpg 56cd173c6e9436b19d39de214669cc53 

17134615_02_hd.jpg /opt/AutoPrivilege/client/photos/FRYW-1713-19796.jpg 271aa1b9ef2ac39c502a270c82b31fa3 

17134615_03_hd.jpg /opt/AutoPrivilege/client/photos/FRYW-1713-19797.jpg 667732a85660bebec168bc46b884d9b7 

17144615_01_hd.jpg /opt/AutoPrivilege/client/photos/FRYW-1714-19763.jpg d37770d6cde5639ce5db4e6a436498a8 

17144615_02_hd.jpg /opt/AutoPrivilege/client/photos/FRYW-1714-19764.jpg ce891ca4d4ea59c3a312a468bb0d4408 

17144615_03_hd.jpg /opt/AutoPrivilege/client/photos/FRYW-1714-19765.jpg bd7fed521fe3997bf5c879d9d5ce942d

像这样:

   with open('1.txt','r') as inF:
    with open('12.txt', 'w') as outF:

        for line in inF:
            if line not in ('\n','\r\n'):
                t = []
                s = line.split()
                t.append(s[3]+'4615_'+s[4]+'_hd.'+s[0].split('.')[1].lower())
                t.append('/opt/AutoPrivilege/client/photos/' + s[1])
                t.append(s[2]+'\n')
                outF.write(' '.join(t))

            else:
                outF.write(line)

相关问题 更多 >