2015-05-26 3 views
2

Я пытаюсь добавить некоторую информацию обо всех файлах торрентов в путь к таблице моей базы данных MySQL, но похоже, что у меня есть проблемы с PATH. Как вы видите, есть полный путь, и он даже обнаруживает «charlie.torrent», поэтому я не понимаю, в чем проблема.IOError: [Errno 2] Нет такого файла или каталога

Это мой код:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import mysql.connector 
import bencode 
import binascii 
import hashlib 
import os 
import sys 

conn = mysql.connector.connect(host="localhost",user="root",password="root", database="TORRENTS") 
cursor = conn.cursor 
path = "/home/florian/TorrentFiles" 
dirs = os.listdir(path) 
for file in dirs: 
     try: 
       with open(file, 'rb') as torrentfile: 
         torrent = bencode.bdecode(torrentfile.read()) 
         user = ("torrent['info']['name']","torrent['info']['length'],'bytes'","(hashlib.sha1(bencode.bencode(torrent['info'])).hexdigest())") 
         cursor.execute("""INSERT INTO torrent_infos (Name, Size, Hash) VALUES(%s, %s, %s)""", user) 
     except bencode.BTL.BTFailure: 
       continue 


conn.close() 

И я действительно не понимаю, следующий вывод моего сценария:

[email protected]:/home/florian/Documents/mysite/polls# python bdd.py 
Traceback (most recent call last): 
    File "bdd.py", line 17, in <module> 
    with open(file, 'rb') as torrentfile: 
IOError: [Errno 2] No such file or directory: 'charlie.torrent' 

Я уже имел взгляд к другим же предметам без каких-либо результатов.

+4

вам нужно 'с открытым (путь + файл, 'rb') в качестве torrentfile:' – heinst

+0

@heinst, имейте в виду, что 'path + file' - простая конкатенация. Если путь «/ home/user/torrents», тогда 'path + file' дает вам'/home/user/torrentscharlie.torrent'. Это также относительно специфично для платформы, поэтому вам нужно будет изменить код для путей в стиле Unix и в стиле Windows. Здесь вызывается 'os.path.join', поскольку он будет учитывать правильные разделители путей (хотя он не будет изменять сам путь). – paidhima

ответ

5

Вы пытаетесь открыть файл, расположенный в path, но не включая этот путь, который пытается открыть файл в текущем рабочем пути вашего скрипта Python. Например, если вы запускаете скрипт с /home/user/script.py, а ваши торренты находятся в /home/user/torrents. Когда вы делаете open(file, 'rb'), вы делаете /home/user/charlie.torrent в отличие от /home/user/torrents/charlie.torrent. Попробуйте заменить with open(file, 'rb') на with open(os.path.join(path, file), 'rb').

0

Вы также можете изменить каталог, в котором вы сейчас находитесь, в путь.

... 
dirs = os.listdir(path) 
os.chdir(path) 
for file in dirs: 
... 

Это также должно работать.

Смежные вопросы