Path, strings, and lines
Malik Rumi
malik.a.rumi at gmail.com
Sat Jun 13 00:48:02 EDT 2015
On Friday, June 12, 2015 at 3:31:36 PM UTC-5, Ian wrote:
> On Fri, Jun 12, 2015 at 1:39 PM, Malik Rumi wrote:
> > I am trying to find a list of strings in a directory of files. Here is my code:
> >
> > # -*- coding: utf-8 -*-
> > import os
> > import fileinput
> >
> > s2 = os.listdir('/home/malikarumi/Projects/P5/shortstories')
>
> Note that the filenames that will be returned here are not fully
> qualified: you'll just get filename.txt, not
> /home/.../shortstories/filename.txt.
>
Yes, that is what I want.
> > for line in lines:
> > for item in fileinput.input(s2):
>
> fileinput doesn't have the context of the directory that you listed
> above, so it's just going to look in the current directory.
Can you explain a little more what you mean by fileinput lacking the context of s4?
>
> > if line in item:
> > with open(line + '_list', 'a+') as l:
> > l.append(filename(), filelineno(), line)
>
> Although it's not the problem at hand, I think you'll find that you
> need to qualify the filename() and filelineno() function calls with
> the fileinput module.
By 'qualify', do you mean something like
l.append(fileinput.filename())?
>
> > FileNotFoundError: [Errno 2] No such file or directory: 'THE LAND OF LOST TOYS~'
>
> And here you can see that it's failing to find the file because it's
> looking in the wrong directory. You can use the os.path.join function
> to add the proper directory path to the filenames that you pass to
> fileinput.
I tried new code:
# -*- coding: utf-8 -*-
import os
import fileinput
os.path.join('/Projects/Pipeline/4 Transforms', '/Projects/P5/shortstories/')
s2 = os.listdir('/Projects/P5/shortstories/')
for item in fileinput.input(s2):
if 'penelope' in item:
print(item)
But still got the same errors even though the assignment of the path variable seems to have worked:
In [51]: import os
In [52]: path = os.path.join('/Projects/Pipeline/4 Transforms', '/Projects/P5/shortstories')
In [53]: print(path)
/Projects/P5/shortstories
In [54]: %run algo_f3.py
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
/home/malikarumi/Projects/Pipeline/4 Transforms/algo_f3.py in <module>()
5
6 os.path.join('/Projects/Pipeline/4 Transforms', '/Projects/P5/shortstories')
----> 7 s2 = os.listdir('/Projects/P5/shortstories')
8 for item in fileinput.input(s2):
9 if 'penelope' in item:
FileNotFoundError: [Errno 2] No such file or directory: '/Projects/P5/shortstories'
In [55]: os.listdir(path)
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-55-9f0bcdc47648> in <module>()
----> 1 os.listdir(path)
FileNotFoundError: [Errno 2] No such file or directory: '/Projects/P5/shortstories'
In [56]: %run algo_f4.py
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
/home/malikarumi/Projects/Pipeline/4 Transforms/algo_f4.py in <module>()
5
6 os.path.join('/Projects/Pipeline/4 Transforms', '/Projects/P5/shortstories/')
----> 7 s2 = os.listdir('/Projects/P5/shortstories/')
8 for item in fileinput.input(s2):
9 if 'penelope' in item:
FileNotFoundError: [Errno 2] No such file or directory: '/Projects/P5/shortstories/'
Clearly, I don't understand os.path.join() although I have read about it and seen examples. In both https://www.youtube.com/watch?v=t5uRlE28F54 Python path.join, and listdir
and in https://courses.cs.washington.edu/courses/cse140/13wi/file-interaction.html they are using a real, existing path to 'create' a path with os.join.path. So my immediate problem is that I don't see why that is necessary if they are dealing with an actual path. Why can't they just use the actual path?
This is why I thought putting the absolute path in my code would solve this problem, but obviously not. Can you help me get a better grasp of how to use os.path.join, and why my refactored code still does not work?
thanks.
>
> > I don't know what the tilde at the end of 'The Land of Lost Toys' is about.
>
> The trailing ~ is a convention used by Emacs (and possibly other
> editors) for files that it creates as backups.
More information about the Python-list
mailing list