Python os.rename使[WinError 32]进程无法访问该文件,因为另一进程正在使用该文件:

Python os.rename使[WinError 32]进程无法访问该文件,因为另一进程正在使用该文件:,python,csv,Python,Csv,你好, 我有一个python脚本,它在CSV中查找特定变量的目录中循环,然后根据这些变量重命名它们。在重命名之前,一切正常。当我得到[WinError 32]时,进程无法访问该文件,因为它正被另一个进程使用:error。已关闭所有应用程序,但仍出现错误。提前谢谢 代码: import os import csv print(os.getcwd()) # check to see current directory os.chdir('\\DataLoad\\Qualities\\Aug-2

你好, 我有一个python脚本,它在CSV中查找特定变量的目录中循环,然后根据这些变量重命名它们。在重命名之前,一切正常。当我得到[WinError 32]时,进程无法访问该文件,因为它正被另一个进程使用:error。已关闭所有应用程序,但仍出现错误。提前谢谢

代码:

import os

import csv

print(os.getcwd()) # check to see current directory

os.chdir('\\DataLoad\\Qualities\\Aug-2018') 

for dirname, dirnames, filenames in os.walk('.'):   

    for filename in filenames: # print path to all filenames.

        if filename[-3:] == 'csv':  
            print(os.path.join(filename)) # (os.path.join(dirname, filename))
            file_name = os.path.join(filename)

            with open(file_name, newline='') as f:
                reader = csv.reader(f)
                header = next(reader) # reads first line of csv - HEADER line
                row1 = f.readlines()[1]
                borehole = row1.split(',')[3].upper()

                if header[13] == 'Yield':
                    NewFile = 'WASH_' + borehole + '.csv'
                    os.rename(file_name, NewFile)

                elif header[13] == 'Min S':
                    NewFile = 'SPECIAL_' + borehole + '.csv'
                    os.rename(file_name, NewFile)
                elif header[13] == 'Ad TS':
                    NewFile = 'PROX_' + borehole + '.csv'
                    os.rename(file_name, NewFile)
                else:
                    NewFile = 'OTHER_' + borehole + '.csv'
                    os.rename(file_name, NewFile)
你有

with open(file_name, newline='') as f
在那个街区里你有

    os.rename(file_name, NewFile)
因此,脚本本身在试图重命名的文件上有一个打开的句柄,这就是出现错误的原因

由于文件的读取在
if
语句之前完成,因此您可以将其取消输入,使其位于
with
块之外:

with open(file_name, newline='') as f:
    reader = csv.reader(f)
    header = next(reader) # reads first line of csv - HEADER line
    row1 = f.readlines()[1]
    borehole = row1.split(',')[3].upper()

if header[13] == 'Yield':
    NewFile = 'WASH_' + borehole + '.csv'
    os.rename(file_name, NewFile)

elif header[13] == 'Min S':
    NewFile = 'SPECIAL_' + borehole + '.csv'
    os.rename(file_name, NewFile)
elif header[13] == 'Ad TS':
    NewFile = 'PROX_' + borehole + '.csv'
    os.rename(file_name, NewFile)
else:
    NewFile = 'OTHER_' + borehole + '.csv'
    os.rename(file_name, NewFile)
你有

with open(file_name, newline='') as f
在那个街区里你有

    os.rename(file_name, NewFile)
因此,脚本本身在试图重命名的文件上有一个打开的句柄,这就是出现错误的原因

由于文件的读取在
if
语句之前完成,因此您可以将其取消输入,使其位于
with
块之外:

with open(file_name, newline='') as f:
    reader = csv.reader(f)
    header = next(reader) # reads first line of csv - HEADER line
    row1 = f.readlines()[1]
    borehole = row1.split(',')[3].upper()

if header[13] == 'Yield':
    NewFile = 'WASH_' + borehole + '.csv'
    os.rename(file_name, NewFile)

elif header[13] == 'Min S':
    NewFile = 'SPECIAL_' + borehole + '.csv'
    os.rename(file_name, NewFile)
elif header[13] == 'Ad TS':
    NewFile = 'PROX_' + borehole + '.csv'
    os.rename(file_name, NewFile)
else:
    NewFile = 'OTHER_' + borehole + '.csv'
    os.rename(file_name, NewFile)

可能有人在后台使用该文件。重新启动系统并再次尝试运行代码。@serbia99脚本本身有一个打开的文件句柄…可能有人在后台使用了该文件。重新启动系统并尝试再次运行代码。@serbia99脚本本身有一个打开的文件句柄。。。