早上好, 我有一个python脚本,该脚本在CSV外观中的目录中循环查找某些变量,然后根据这些变量重命名它们。当我收到[WinError 32]时,一切正常,直到重命名为止。该进程无法访问该文件,因为该文件正被另一个进程使用:错误。关闭了所有应用程序,但仍然出现错误。预先感谢
代码:
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)
答案 0 :(得分:3)
你有
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)