- Do I have to create the file manually and name it?
Do you mean as a user, must you use existing tools to create a file, then return to Python to work on it? No. Python has all the tools necessary to create a file. As already explained by vks in their answer, you must open the file using a mode that will create the file if it doesn't exist. You've chosen read ('r') mode, which will (correctly) throw an error if there is no file to read at the location you've specified, which brings us to...
- I'm assuming I have to declare the path, but how do I do so in Python?
If you do not (if you say, e.g., "filename.txt"), Python will look in its current working directory. By default, this is the current working directory of the shell when you invoke the Python interpreter. This is almost always true unless some program has changed it, which is unusual. To specify the path, you can either hardcode it like you're doing to the filename:
open('/full/path/to/filename.txt')
or you can build it using the os.path
module.
Example:
I created an empty directory and opened the Python interpreter in it.
>>> with open('test.txt'): pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'test.txt'
>>> with open('test.txt', 'w'): pass
...
>>>
As noted, read mode (the default) gives an error because there is no file. Write mode creates a file for us with nothing in it. Now we can see the file in the directory, and opening with read mode works:
>>> os.listdir(os.getcwd())
['test.txt']
>>> with open('test.txt'): pass
...
>>> # ^ No IOError because it exists now
Now I create a subdirectory called 'subdir' and move the text file in there. I did this on the command line but could have just as easily done it in Python:
>>> with open('test.txt'): pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'test.txt'
>>> with open('subdir/test.txt'): pass
...
Now we have to specify the relative path (at least) to open the file, just like on the command line. Here I "hardcoded" it but it can just as easily be "built up" using the os
module:
>>> with open(os.path.join(os.getcwd(), 'subdir', 'test.txt')): pass
(That is just one way it could be done, as an example.)