Python组织文本的内容

2024-04-20 00:58:32 发布

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

我有一个文本文件,其中包含以下内容:

IMAGE_[A0]_00001.jpg
IMAGE_[A0]_00002.jpg
IMAGE_[A1]_00001.jpg
IMAGE_[A1]_00002.jpg
IMAGE_[B0]_00001.jpg
IMAGE_[B0]_00002.jpg
IMAGE_[B1]_00001.jpg
IMAGE_[B1]_00002.jpg

我需要组织如下:

IMAGE_[A0]_00001.jpg
IMAGE_[A1]_00001.jpg
IMAGE_[B0]_00001.jpg
IMAGE_[B1]_00001.jpg
IMAGE_[A0]_00002.jpg
IMAGE_[A1]_00002.jpg
IMAGE_[B0]_00002.jpg
IMAGE_[B1]_00002.jpg

如何使用python3x实现这一点


Tags: imagea1b0a0b1jpg文本文件python3x
3条回答

您可以使用resorted

import re
import string
def key_param(d):
   a, b= re.findall('(?<=\[)\w+(?=\])|\d+(?=\.jpg)', d)
   return [int(b)]+[int(i) if i.isdigit() else string.ascii_uppercase.index(i) for i in a]

file_data = [i.strip('\n') for i in open('filename.txt')]

new_data = sorted(file_data, key=key_param)
with open('filename.txt', 'w') as f:
  f.write('\n'.join(new_data))

输出:

IMAGE_[A0]_00001.jpg
IMAGE_[A1]_00001.jpg
IMAGE_[B0]_00001.jpg
IMAGE_[B1]_00001.jpg
IMAGE_[A0]_00002.jpg
IMAGE_[A1]_00002.jpg
IMAGE_[B0]_00002.jpg
IMAGE_[B1]_00002.jpg

您可以使用密钥进行排序,然后写回文件:

with open('test.txt') as f:
    data = sorted(f.read().splitlines(), key=lambda x: (x[11:16], x[7:9]))
    print('\n'.join(data))

输出:

IMAGE_[A0]_00001.jpg
IMAGE_[A1]_00001.jpg
IMAGE_[B0]_00001.jpg
IMAGE_[B1]_00001.jpg
IMAGE_[A0]_00002.jpg
IMAGE_[A1]_00002.jpg
IMAGE_[B0]_00002.jpg
IMAGE_[B1]_00002.jpg

您的项目命名为IMAGE_x _y .jpg。它们现在按(x,y)排序,您需要按(y,x)排序

这可以通过正则表达式来实现:

import re

# group 1 is things like `[A0]`, group 2, like `00001`.
name_rx = re.compile('IMAGE_(.*)_(.*)\\.jpg')

def sort_key(s):
  match = rx_.match(s)
  if match:
    return (match.group(2), match.group(1))  # reverse parts
  else:
    return (x, x)  # Natural order for those who don't match.

new_list = sorted(old_list, key=sort_key)

相关问题 更多 >