Prev: GUIs (was: grailbrowser now running under python 2.5 (probably above too))
Next: multitask http server (single-process multi-connection HTTP server)
From: python on 12 Jul 2010 17:53
> split() also splits at other whitespace.
Doh! Corrected version follows:
print ''.join( open( 'Direct_Irr.txt' ).read().splitlines() )
- open(): open file
- read(): read its entire contents as one string
- splitlines(): split the contents into a list of lines
(splits lines at \n; does not include \n in split values)
- ''.join(): join list of lines with an empty char
From: Benjamin Kaplan on 12 Jul 2010 20:45
On Mon, Jul 12, 2010 at 2:33 PM, Jia Hu <hujia06(a)gmail.com> wrote:
> Thank you. It works now.
> if I use 'print' to print the whole list, 'print' will add newline
> at the end of the list but not each item in the list. right?
> For the code:
> for line in fileName:
> line = line.rstrip('\n')
> I think this will affect 'fileName' because it assign the value to 'line' ?
No it does not. Python assignments never modify anything other than
the enclosing namespace.
"for line in fileName" reads a line from the file and creates a
string. That string resides in memory somewhere, who knows where. It
does not reside inside fileName- it is a separate object. That string
is then bound to the name "line" in the current namespace (the
module's namespace in this case). Variables in Python are just entries
in a dictionary. In fact, you can do globals()["line"] and it will
return the string associated with that name.
line.rstrip("\n") gets the object associated with the name "line" and
accesses the object with the name "rstrip" that's associated with the
object named "line". It then calls that object (in this case a
builtin_function_or_method object) with the string "\n" as a
rstrip then generates a new string.
The line = (that new string that was just generated) associates the
new string with the name "line". The old string hasn't changed at all
(in fact, the object will get deleted almost immediately since it's
reference count just dropped to 0). And the file hasn't changed
> But when I print fileName, "\n" still exists at each item in the list.
> Because each line in my txt file are numeric values. is there any other
> better way to get each
> numerical value at each line? for example using numpy or changing string
> list to numerical list?
> Thank you for help.
> On Mon, Jul 12, 2010 at 4:45 PM, Chris Rebert <clp2(a)rebertia.com> wrote:
>> On Mon, Jul 12, 2010 at 1:27 PM, Jia Hu <hujia06(a)gmail.com> wrote:
>> > Hi, I just want to delete "\n" at each line. My operating system is
>> > ubuntu
>> > 9.1. The code is as follows
>> > #!/usr/bin/python
>> > import string
>> > fileName=open('Direct_Irr.txt', 'r') # read file
>> > directIrr = fileName.readlines()
>> > fileName.close()
>> > for line in directIrr:
>> > line.rstrip('\n')
>> > print directIrr
>> > But I found there is still "\n" . Could someone help me why it is not
>> > correct?
>> .rstrip() returns a *new* string without trailing whitespace (which
>> you are currently then throwing away); it does *not* modify string
>> objects in-place. Python strings objects are entirely immutable and
>> unmodifiable; all operations on them merely produce /new/ strings.
>> Assuming you still want to use .readlines(), you'd do:
>> directIrr = fileName.readlines()
>> directIrr = [line.rstrip('\n') for line in directIrr]
>> print directIrr
>> For how third line works, google "python list comprehensions".