Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-addfind和Replace语句_Python_Excel_Filenames_Batch Rename_Find Replace - Fatal编程技术网

Python-addfind和Replace语句

Python-addfind和Replace语句,python,excel,filenames,batch-rename,find-replace,Python,Excel,Filenames,Batch Rename,Find Replace,非常感谢您将我的代码恢复到当前状态,但我一直在碰壁 代码将excel文件读入列表,然后在文件夹中循环并重命名文件,但它会按照列表的顺序执行此操作,然后从第一个文件开始,一直到最后一个文件,因此如果我手动对excel列表和文件本身进行排序,我可以准确地重命名它们,但我希望添加一个find()这样我可以使这个程序更灵活 目标-添加find(),这样它将循环浏览当前文件名列表(在excel中),然后在所选文件夹中找到正确的文件,然后将其重命名为正确的新名称 当前工作代码(不带Find()): 我试图在

非常感谢您将我的代码恢复到当前状态,但我一直在碰壁

代码将excel文件读入列表,然后在文件夹中循环并重命名文件,但它会按照列表的顺序执行此操作,然后从第一个文件开始,一直到最后一个文件,因此如果我手动对excel列表和文件本身进行排序,我可以准确地重命名它们,但我希望添加一个find()这样我可以使这个程序更灵活

目标-添加find(),这样它将循环浏览当前文件名列表(在excel中),然后在所选文件夹中找到正确的文件,然后将其重命名为正确的新名称

当前工作代码(不带Find()):

我试图在代码中添加if(),但它只是说:“找不到文件”

将此添加到循环原始文件名列并添加到列表中:

def originalFilenameRange(startCol, startRow, endCol, endRow, sheet):
    originalFilenameRange = []
    # Loops through selected Rows
    for i in range(startRow, endRow + 1, 1):
        # Appends the row to a RowSelected list
        rowSelected = []
        for j in range(startCol, endCol + 1, 1):
            rowSelected.append(sheet.cell(row=i, column=j).value)
        # Adds the RowSelected List and nests inside the rangeSelected
        originalFilenameRange.append(rowSelected)

    return originalFilenameRange

# Takes: start cell, end cell, and sheet you want to copy from.
def copyRange(startCol, startRow, endCol, endRow, sheet):
    rangeSelected = []
    # Loops through selected Rows
    for i in range(startRow, endRow + 1, 1):
        # Appends the row to a RowSelected list
        rowSelected = []
        for j in range(startCol, endCol + 1, 1):
            rowSelected.append(sheet.cell(row=i, column=j).value)
        # Adds the RowSelected List and nests inside the rangeSelected
        rangeSelected.append(rowSelected)

    return rangeSelected


def renameFiles():
    print('Processing...')

    # Make a folder for the files
    current_directory = os.getcwd()
    folder_n_path = os.path.join(current_directory, folderDestination)
    print("Files saved to: " + folder_n_path)
    try:
        newFolder = os.makedirs(folder_n_path)

    except:
        print("Folder already exists")
        return

    # Get the Data to make the file names
    selectedRange = copyRange(1, 1, 2, 2, file_names_sheet)
    filesToFind = originalFilenameRange(3,1,3,2094,file_names_sheet)
    print(selectedRange)
    print(filesToFind)
    print (folderSource)
    for filename in os.listdir(folderSource):
        for i, filename in zip(selectedRange, os.listdir(folderSource)):
            filename = os.path.join(folderSource, filename)
            print (filename)
            if filename in filesToFind:
                file_name = i[0] + " " + i[1] + ".jpg"
                filename = os.path.join(folderSource, filename)
                file_name = os.path.join(folderDestination, file_name)
                shutil.copy(filename, file_name)
                print("Done")
            else:
                print ("File does not exist: " + filename)

go = renameFiles()
所有内容都正确打印到此点,然后通过此循环跳转到“未找到文件”:

def originalFilenameRange(startCol, startRow, endCol, endRow, sheet):
    originalFilenameRange = []
    # Loops through selected Rows
    for i in range(startRow, endRow + 1, 1):
        # Appends the row to a RowSelected list
        rowSelected = []
        for j in range(startCol, endCol + 1, 1):
            rowSelected.append(sheet.cell(row=i, column=j).value)
        # Adds the RowSelected List and nests inside the rangeSelected
        originalFilenameRange.append(rowSelected)

    return originalFilenameRange

# Takes: start cell, end cell, and sheet you want to copy from.
def copyRange(startCol, startRow, endCol, endRow, sheet):
    rangeSelected = []
    # Loops through selected Rows
    for i in range(startRow, endRow + 1, 1):
        # Appends the row to a RowSelected list
        rowSelected = []
        for j in range(startCol, endCol + 1, 1):
            rowSelected.append(sheet.cell(row=i, column=j).value)
        # Adds the RowSelected List and nests inside the rangeSelected
        rangeSelected.append(rowSelected)

    return rangeSelected


def renameFiles():
    print('Processing...')

    # Make a folder for the files
    current_directory = os.getcwd()
    folder_n_path = os.path.join(current_directory, folderDestination)
    print("Files saved to: " + folder_n_path)
    try:
        newFolder = os.makedirs(folder_n_path)

    except:
        print("Folder already exists")
        return

    # Get the Data to make the file names
    selectedRange = copyRange(1, 1, 2, 2, file_names_sheet)
    filesToFind = originalFilenameRange(3,1,3,2094,file_names_sheet)
    print(selectedRange)
    print(filesToFind)
    print (folderSource)
    for filename in os.listdir(folderSource):
        for i, filename in zip(selectedRange, os.listdir(folderSource)):
            filename = os.path.join(folderSource, filename)
            print (filename)
            if filename in filesToFind:
                file_name = i[0] + " " + i[1] + ".jpg"
                filename = os.path.join(folderSource, filename)
                file_name = os.path.join(folderDestination, file_name)
                shutil.copy(filename, file_name)
                print("Done")
            else:
                print ("File does not exist: " + filename)

go = renameFiles()

看起来
filesToFind
是一个基于
print(filesToFind)
结果的嵌套列表。在您的比较行中:

if filename in filesToFind:
您正在将字符串与列表中的列表进行比较,该列表总是失败

您需要将
文件名
字符串与字符串列表进行比较
['filename','filename2',…]
。注意到细微的差别了吗

查看您的代码,您正在将
filesToFind
设置为:

filesToFind = originalFilenameRange(3,1,3,2094,file_names_sheet)
因此,您需要更改
originalFilenameRange
方法以返回字符串列表,而不是列表列表

一个简单的单行代码更改可以使您的代码正常工作,它位于
originalFilenameRange
方法的这一行:

originalFilenameRange.append(rowSelected)
为此:

originalFilenameRange.append(rowSelected[0])

如果你打印
filesToFind
你得到了预期的结果吗?是的,这增加了我的困惑:
print(selectedRange)给出:[000197',Marie Corrales'],[000232',Richard Methvin']
打印(filesToFind)给出:[000197.jpg'],['000232.jpg']打印(文件名)给出:C:/Users/jx0062/Documents/PythonTest/Photos-Copy\000197.jpg文件不存在:filename C:/Users/jx0062/Documents/PythonTest/Photos-Copy\000232.jpg文件不存在:filename因此它似乎正确地加入了文件路径,因为当我右键单击并复制到路径时,我得到以下结果:“C:\Users\jx0062\Documents\PythonTest\Photos-Copy\000197.jpg”是否与绝对路径和相对路径有关?将它们添加到一个列表中,这样很好,现在
打印(fiilesToFind)
给出:
['000197.jpg','000232.jpg']
打印(文件名)
给出:
C:/Users/jx0062/Documents/PythonTest/Photos-Copy\000197.jpg
,与以前一样,但我仍然得到“文件不存在:文件名”,并且不会因此移动或重命名任何内容。如果语句在哪里,我是否需要移动到
语句所在的位置?它是否应该在
for
循环之外?我将试一试(添加常量)。感谢您的帮助!