Python: 将文件移动到新创建的目录
Python: moving file to a newly created directory
我的脚本创建了一堆文件(大小因输入而异),我想根据文件名成为特定文件夹中的特定文件。
到目前为止,我得到了以下信息,但是虽然正在创建目录,但没有文件被移动,我不确定最后一个 for 循环中的逻辑是否有意义。
在下面的代码中,我试图将所有以 _01 结尾的 .png 文件移动到 sub_frame_0 文件夹中。
此外,他们以某种方式增加文件结尾 _01 到 _02 等,以及 destn 文件夹,即。从 sub_frame_0 到 sub_frame_1 再到 sub_frame_2 等等。
for index, i in enumerate(range(num_sub_frames+10)):
path = os.makedirs('./sub_frame_{}'.format(index))
# Slice layers into sub-frames and add to appropriate directory
list_of_files = glob.glob('*.tif')
for fname in list_of_files:
image_slicer.slice(fname, num_sub_frames) # Slices the .tif frames into .png sub-frames
list_of_sub_frames = glob.glob('*.png')
for i in list_of_sub_frames:
if i == '*_01.png':
shutil.move(os.path.join(os.getcwd(), '*_01.png'), './sub_frame_0/')
一个简单的修复方法是检查“*_01.png”是否在文件名 i
中,并更改 shutil.move
以包含文件名 i
。 (还值得一提的是 i
不是文件路径的好名称
list_of_sub_frames = glob.glob('*.png')
for i in list_of_sub_frames:
if '*_01.png' in i:
shutil.move(os.path.join(os.getcwd(), i), './sub_frame_0/')
Additionally is [there some way] to increment both the file endings _01 to _02 etc., and the destn folder ie. from sub_frame_0 to sub_frame_1 to sub_frame_2 and so on.
您可以像这样简单地创建文件名:
for i in range(10):
#simple string parsing
file_name = 'sub_frame_'+str(i)
folder_name = 'folder_sub_frame_'+str(i)
正如你所说,最终循环的逻辑没有意义。
if i == '*_01.ng'
它会计算类似 'image_01.png' == '*_01.png'
的值,并且始终为 false。
正则表达式应该是可行的方法,但对于这种简单的情况,您只需从文件名中切出数字即可。
for i in list_of_sub_frames:
frame = int(i[-6:-4]) - 1
shutil.move(os.path.join(os.getcwd(), i), './sub_frame_{}/'.format(frame))
如果 i = 'image_01.png'
则 i[-6:-4]
将采用“01”,将其转换为整数,然后减去 1 以遵循您的模式。
这是一个使用正则表达式的完整示例。这也实现了文件names/destination文件夹
的递增
import os
import glob
import shutil
import re
num_sub_frames = 3
# No need to enumerate range list without start or step
for index in range(num_sub_frames+10):
path = os.makedirs('./sub_frame_{0:02}'.format(index))
# Slice layers into sub-frames and add to appropriate directory
list_of_files = glob.glob('*.tif')
for fname in list_of_files:
image_slicer.slice(fname, num_sub_frames) # Slices the .tif frames into .png sub-frames
list_of_sub_frames = glob.glob('*.png')
for name in list_of_sub_frames:
m = re.search('(?P<fname>.+?)_(?P<num>\d+).png', name)
if m:
num = int(m.group('num'))+1
newname = '{0}_{1:02}.png'.format(m.group('fname'), num)
newpath = os.path.join('./sub_frame_{0:02}/'.format(num), newname)
print m.group() + ' -> ' + newpath
shutil.move(os.path.join(os.getcwd(), m.group()), newpath)
我的脚本创建了一堆文件(大小因输入而异),我想根据文件名成为特定文件夹中的特定文件。
到目前为止,我得到了以下信息,但是虽然正在创建目录,但没有文件被移动,我不确定最后一个 for 循环中的逻辑是否有意义。
在下面的代码中,我试图将所有以 _01 结尾的 .png 文件移动到 sub_frame_0 文件夹中。
此外,他们以某种方式增加文件结尾 _01 到 _02 等,以及 destn 文件夹,即。从 sub_frame_0 到 sub_frame_1 再到 sub_frame_2 等等。
for index, i in enumerate(range(num_sub_frames+10)):
path = os.makedirs('./sub_frame_{}'.format(index))
# Slice layers into sub-frames and add to appropriate directory
list_of_files = glob.glob('*.tif')
for fname in list_of_files:
image_slicer.slice(fname, num_sub_frames) # Slices the .tif frames into .png sub-frames
list_of_sub_frames = glob.glob('*.png')
for i in list_of_sub_frames:
if i == '*_01.png':
shutil.move(os.path.join(os.getcwd(), '*_01.png'), './sub_frame_0/')
一个简单的修复方法是检查“*_01.png”是否在文件名 i
中,并更改 shutil.move
以包含文件名 i
。 (还值得一提的是 i
不是文件路径的好名称
list_of_sub_frames = glob.glob('*.png')
for i in list_of_sub_frames:
if '*_01.png' in i:
shutil.move(os.path.join(os.getcwd(), i), './sub_frame_0/')
Additionally is [there some way] to increment both the file endings _01 to _02 etc., and the destn folder ie. from sub_frame_0 to sub_frame_1 to sub_frame_2 and so on.
您可以像这样简单地创建文件名:
for i in range(10):
#simple string parsing
file_name = 'sub_frame_'+str(i)
folder_name = 'folder_sub_frame_'+str(i)
正如你所说,最终循环的逻辑没有意义。
if i == '*_01.ng'
它会计算类似 'image_01.png' == '*_01.png'
的值,并且始终为 false。
正则表达式应该是可行的方法,但对于这种简单的情况,您只需从文件名中切出数字即可。
for i in list_of_sub_frames:
frame = int(i[-6:-4]) - 1
shutil.move(os.path.join(os.getcwd(), i), './sub_frame_{}/'.format(frame))
如果 i = 'image_01.png'
则 i[-6:-4]
将采用“01”,将其转换为整数,然后减去 1 以遵循您的模式。
这是一个使用正则表达式的完整示例。这也实现了文件names/destination文件夹
的递增import os
import glob
import shutil
import re
num_sub_frames = 3
# No need to enumerate range list without start or step
for index in range(num_sub_frames+10):
path = os.makedirs('./sub_frame_{0:02}'.format(index))
# Slice layers into sub-frames and add to appropriate directory
list_of_files = glob.glob('*.tif')
for fname in list_of_files:
image_slicer.slice(fname, num_sub_frames) # Slices the .tif frames into .png sub-frames
list_of_sub_frames = glob.glob('*.png')
for name in list_of_sub_frames:
m = re.search('(?P<fname>.+?)_(?P<num>\d+).png', name)
if m:
num = int(m.group('num'))+1
newname = '{0}_{1:02}.png'.format(m.group('fname'), num)
newpath = os.path.join('./sub_frame_{0:02}/'.format(num), newname)
print m.group() + ' -> ' + newpath
shutil.move(os.path.join(os.getcwd(), m.group()), newpath)