Возникли проблемы с путем к файлу в Ubuntu - PullRequest
0 голосов
/ 08 января 2019

У меня проблемы с путем к определенному файлу. На самом деле он отлично работает в Mac OS, но когда я запускаю тот же кусок кода в Ubuntu, он выдает эту ошибку:

FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/Desktop/Numeratti/pg2dm-python-master/ch2/BX-Dump/BX-Book-Ratings.csv'

Я написал скрипт в sublime-text и запускаю его из терминала (ubuntu)

def loadBookDB(self, path=''):
    """loads the BX book dataset. Path is where the BX files are
    located"""
    self.data = {}
    i = 0
    #
    # First load book ratings into self.data
    #
    f = codecs.open(path + "BX-Book-Ratings.csv", 'r', 'utf8')
    for line in f:
        i += 1
        #separate line into fields
        fields = line.split(';')
        user = fields[0].strip('"')
        book = fields[1].strip('"')
        rating = int(fields[2].strip().strip('"'))
        if user in self.data:
            currentRatings = self.data[user]
        else:
            currentRatings = {}
        currentRatings[book] = rating
        self.data[user] = currentRatings
    f.close()
    f = codecs.open(path + "BX-Books.csv", 'r', 'utf8')
    for line in f:
        i += 1
        #separate line into fields
        fields = line.split(';')
        isbn = fields[0].strip('"')
        title = fields[1].strip('"')
        author = fields[2].strip().strip('"')
        title = title + ' by ' + author
        self.productid2name[isbn] = title
    f.close()
    #
    #  Now load user info into both self.userid2name and
    #  self.username2id
    #
    f = codecs.open(path + "BX-Users.csv", 'r', 'utf8')
    for line in f:
        i += 1
        #print(line)
        #separate line into fields
        fields = line.split(';')
        userid = fields[0].strip('"')
        location = fields[1].strip('"')
        if len(fields) > 3:
            age = fields[2].strip().strip('"')
        else:
            age = 'NULL'
        if age != 'NULL':
            value = location + '  (age: ' + age + ')'
        else:
            value = location
        self.userid2name[userid] = value
        self.username2id[location] = userid
    f.close()

Я хотел бы знать, почему это происходит. Проблема в том, что я не могу загрузить набор данных. Я думаю, что это связано с путями к файлам в Linux, потому что, когда я запускаю тот же скрипт через терминал в MAC OS, он отлично загружает набор данных.

Спасибо!

1 Ответ

0 голосов
/ 08 января 2019

Есть несколько способов решить эту проблему

1

Попробуйте найти файл в браузере файлов, щелкните по нему правой кнопкой мыши -> Свойства -> скопируйте местоположение и добавьте имя файла.

В Linux имена файлов обычно начинаются с /home/<username>/... или с коротких ~/...

2

Если вы работаете с python в терминале, вы можете использовать

>>> import os
>>> cwd = os.getcwd()
>>> my_dir = os.path.join(cwd, "my_dir")

3

Если у вас нет файлового браузера, только терминал, вы можете использовать cd <dir> для перемещения по вашей файловой системе и ls для поиска вашего файла, а если вы нашли его, используйте realpath <file> для распечатки всего имени файла.

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