![](/img/trans.png)
[英]os.rename saying cannot access the file because it is being used by another process
[英]os.rename gives [WinError 32] The process cannot access the file because it is being used by another process:
美好的一天,我有一個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)
你有
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.