简体   繁体   中英

IOError: [Errno 2] No such file or directory?

在此处输入图片说明

I'm trying to move 220 files in Wheat to train_reuters file package,and the another files in wheat move to train_reuters test_reuters file package,but when I run the code,it give me the error,I actually have the file in the right place!how can I solve the problem? 在此处输入图片说明

#!/usr/bin/python
#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import os
import os.path
import shutil
import random
path = '/home/user1/zhouchun/lda/reuters-21578/Wheat'
targetpath1 = '/home/user1/zhouchun/lda/reuters-21578/train_reuters'
targetpath2 = '/home/user1/zhouchun/lda/reuters-21578/test_reuters'
list=random.sample(range(1, 306),220)
for i in list:
    file_dir = os.path.join(path, str(i))
    # print file_dir
    shutil.move(file_dir, targetpath1)
files = os.listdir(path)
for file in files:
    # print file
    dir = os.path.join(path, file)
    if dir != file_dir:
        shutil.move(dir, targetpath2)

I checked your code, it is right. Then the problem maybe: 1. you could only run your code one time, two or more times will cause this error. 2. Before you run your code, make sure all the 306 files are in Wheat directory.

I suggest using copy, but not move,then clear the train and test file before each run.

Please check the ome/user1/zhouchun/lda/reuters-21578/Wheat files number is 305.

I created a function write the random file, the code you can reference.

import random
import os

path = r'E:\temp\temp'

list= random.sample(range(1, 306), 220)
for i in list:
    file_dir = os.path.join(path, str(i))
    with open(file_dir, 'w') as f:
        f.write('file_dir: %s' % file_dir)
        f.close()

please notices the 220 in line list= random.sample(range(1, 306), 220) .

After do this paste you code and change the path,

#!/usr/bin/python
#coding:utf-8
import sys

import os.path
import shutil
import random
import time

path = r'E:\temp\temp'
targetpath1 = r'E:\temp\old'
targetpath2 = r'E:\temp\new'   

# move the file    
list = random.sample(range(1, 306), 220)
for i in list:
    file_dir = os.path.join(path, str(i))
    # print file_dir
    # targetpath1_dir = os.path.join(targetpath1, str(i))
    shutil.move(file_dir, targetpath1)
files = os.listdir(path)


for file in files:
    # print(file)
    # print file
    dir = os.path.join(path, file)

    if dir != file_dir:
        shutil.move(dir, targetpath2)

Than run the code, the error information will income.

Traceback (most recent call last):
  File "D:\Python_3.5\lib\shutil.py", line 544, in move
    os.rename(src, real_dst)
FileNotFoundError: [WinError 2] System can't found the file.: 'E:\\temp\\temp\\182' -> 'E:\\temp\\old\\182'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "F:/Python_Code/FaceDetect/123123.py", line 31, in <module>
    shutil.move(file_dir, targetpath1)
  File "D:\Python_3.5\lib\shutil.py", line 558, in move
    copy_function(src, real_dst)
  File "D:\Python_3.5\lib\shutil.py", line 257, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "D:\Python_3.5\lib\shutil.py", line 120, in copyfile
    with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: 'E:\\temp\\temp\\182'

After change the number from 220 to 305 in line list= random.sample(range(1, 306), 220) , the error will disappear.

The complete code.

#!/usr/bin/python
#coding:utf-8
import sys

import os.path
import shutil
import random
import time

path = r'E:\temp\temp'
targetpath1 = r'E:\temp\old'
targetpath2 = r'E:\temp\new'

# create the random file.
list= random.sample(range(1, 306), 220)
for i in list:
    file_dir = os.path.join(path, str(i))
    with open(file_dir, 'w') as f:
        f.write('file_dir: %s' % file_dir)
        f.close()

time.sleep(1)

# move the file

list = random.sample(range(1, 306), 220)
for i in list:
    file_dir = os.path.join(path, str(i))
    # print file_dir
    # targetpath1_dir = os.path.join(targetpath1, str(i))
    shutil.move(file_dir, targetpath1)
files = os.listdir(path)


for file in files:
    # print(file)
    # print file
    dir = os.path.join(path, file)

    if dir != file_dir:
        shutil.move(dir, targetpath2)

Please reference.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM