2013-07-15 5 views
1

Я уверен, что это есть ответ, но я не мог найти что-нибудь, чтобы помочь мне ...Файл не найден в Python

Я пытаюсь написать простую программу для чтения файла и найдите слово, затем напечатайте, сколько раз это слово находится в файле. Ну, каждый раз, когда я типа в «test.rtf» (который является именем моего документа) Я получаю эту ошибку ...

Traceback (most recent call last): 
    File "/Users/AshleyStallings/Documents/School Work/Computer Programming/Side Projects/How many? (Python).py", line 9, in <module> 
    fileScan= open(fileName, 'r') #Opens file 
FileNotFoundError: [Errno 2] No such file or directory: 'test.rtf' 

В классе в прошлом семестре, я, кажется, помню мой профессор говорил, вы должны сохранить файл в определенном месте? Я не уверен, действительно ли он это сказал, но я использую apple OSx, если это помогает. Ха-ха

Вот мой код, и любая помощь приветствуется :) Спасибо заранее!

print ("Hello! Welcome to the 'How many' program.") 
fileName= input("Please enter the name of the file you'd like to use. Make \ 
sure to include the correct extension!") #Gets file name 

fileScan= open(fileName, 'r') #Opens file 

cont = "Yes" 
accumulator = 0 

while cont == "Yes": 
    word=input("Please enter the word you would like to scan for.") #Asks for word 
    capitalized= word.capitalize() 
    lowercase= word.lower() 

    print ("\n") 
    print ("\n")  #making it pretty 
    print ("Searching...") 

    for word in fileScan.read(): #checking for word 
      accumulator += 1 

    print ("The word ", word, "is in the file ", accumlator, "times.") 

    cont = input ('Type "Yes" to check for another word or \ 
"No" to quit.') #deciding next step 
    cont = cont.capitalize() 

    if cont != "No" or cont != "Yes": #checking for valid input 
     print ("Invalid input.") 
     cont = input ('Type "Yes" to check for another word or \ 
"No" to quit.') 
    cont = cont.capitalize() 

print ("Thanks for using How many!") #ending 
+2

Поскольку вы не указали путь, файл должен находиться в каталоге, где вы запускаете скрипт. вероятно '/ Пользователи/AshleyStallings/Documents/School Work/Компьютерное программирование /' – njzk2

ответ

5

Если пользователь не проходит полный путь (в системах типа Unix это означает, что путь начинается с косой черты) в файл, путь интерпретируется относительно текущего рабочего каталога. Текущий рабочий каталог обычно является каталогом, в котором вы запустили программу. В вашем случае файл test.rtf должен находиться в том же каталоге, в котором вы выполняете программу.

Очевидно, что вы выполняете задачи программирования на Python в Mac OS. Там, я рекомендую работать в терминале (в командной строке), то есть запустить терминал, cd в каталог, где находится ваш входной файл и запустите скрипт Python там с помощью команды

$ python script.py 

Для того, чтобы выполните эту работу, каталог, содержащий исполняемый файл python, должен находиться в PATH, так называемой переменной среды, которая содержит каталоги, которые автоматически используются для поиска исполняемых файлов при вводе команды. Вы должны использовать это, потому что это значительно упрощает ежедневную работу. Таким образом, вы можете просто cd в каталог, содержащий ваш файл сценария Python, и запустите его.

В любом случае, если ваш файл сценария Python и ваш входной файл данных находятся не в одном каталоге, вам всегда нужно указать либо относительный путь между ними, либо вам нужно использовать абсолютный путь для одного из них.

+0

Большое вам спасибо! Кто-нибудь знает, как я могу заставить свою программу искать весь мой компьютер для того, что назвал документ? Таким образом, мне не нужно каждый раз сохранять его в определенном месте? –

+0

Ты не хочешь этого делать, поверь мне. Но есть еще один механизм, который может вам очень помочь, подождите несколько секунд для редактирования моего ответа. –

+0

Ум, нет, это явно НЕ окна. Путь, например, представляет собой канонический путь MacOS. Не говоря уже: «Я запускаю apple OSx, если это помогает» –

1

«Test.rtf» находится в том же каталоге, в котором вы находитесь, когда запускаете это? Если нет, вам необходимо предоставить полный путь к этому файлу.

Предположим, что он находится в/Users/AshleyStallings/Документы/Школа Работа/Компьютерные Программирование/Side Проекты/данные

В этом случае нужно ввести

данные/test.rtf

, как ваше имя файла

Или это может быть в/Users/AshleyStallings/Документы/Школа Работа/Программирование/some_other_folder

В этом случае нужно ввести

../some_other_folder/test.rtf

+0

Вы знаете, почему строка для слова в fileScan.read(): #checking for word Аккумулятор + = 1 не работает? Мне пришлось искать слово «Эшли», и он вернулся, сказав, что он был найден 336 раз, когда в моем тестовом документе есть только 4 слова ... также по какой-то причине после этой строки, когда у меня есть это print (word) It изменения и вместо печати Ashley он печатает только { –

+0

для слова в foo: объявляет новую переменную, слово, только для этого цикла, которая тени вашей существующей переменной называется словом. Затем эта итерационная переменная берет каждое значение из последовательности foo и выполняет запрошенную операцию, в этом случае добавляя ее к ней. Так было добавлено 336. Почему 336? Поскольку file.read() возвращает содержимое файла в виде строки, вы выполняете итерацию по строке, которая выполняется символом по символу. Таким образом, в вашем файле должно быть 336 символов. –

+0

Хорошо, поэтому я изменил его на это, чтобы он не записывал слово, но теперь он возвращает 0. Есть ли способ заставить его искать всю строку слова? ... для сканирования в файлеScan.read() : #checking for word if scan == word: accumulator + = 1 –

1

Хороший старт будет проверка ввода.Другими словами, вы можете убедиться, что пользователь действительно набран правильный путь для реального существующего файла, например:

import os 
fileName = input("Please enter the name of the file you'd like to use.") 
while (not os.path.isFile(fileName)) or (not os.path.exists(fileName)): 
    fileName = input("Whhoops! No such file! Please enter the name of the file you'd like to use.") 

Это с небольшой помощью встроенного модуля os, что является частью стандартной библиотеки Python.

0

Трудно привести примеры кода в комментариях.

Чтобы прочитать слова в файле, вы можете прочитать содержимое файла, в котором вы получите строку - это то, что вы делали раньше, с помощью метода read(), а затем используйте split() для получения отдельные слова. Split разбивает строку на предоставленный разделитель или по умолчанию по умолчанию. Например,

"the quick brown fox".split() 

производит

['the', 'quick', 'brown', 'fox'] 

Аналогично,

fileScan.read().split() 

даст вам массив строк. Надеюсь, что это поможет!

+0

Большое вам спасибо! Я получил его работу :) –

+0

Рад, что я мог бы помочь. –

+0

У меня есть последний вопрос, если вы не возражаете ... Я собираюсь опубликовать его как ответ, так как в нем есть немного кода. –

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