简体   繁体   中英

Reading a file and storing values into variables in python

Let's say I have a filename (test.txt) with the following data in it:

AA11 BB11 CC11 DD11
AA22 BB22 CC22 DD22
AA33 BB44 CC44 DD33

in bash (shell scripting) I can do the following:

cat test.txt | while read a b c d 
do
echo "this is the first column $a "
echo "this is the second column $b "
echo "this is the third column $c "
echo "this is the fifth column $d "
done

How can I do the same with python? how can I store the value of each column in a variable and then read the file line by line while storing and manipulating their value?

file = open('test.txt')
for line in file:
    fields = line.strip().split()
    print fields[0], fields[1], fields[2], fields[3]

Python is so easy :)

To be more specific, split() splits the contents of a string into fields delimited by some delimiter (by default any blank character, eg space, tab etc.), and returns an array with the split fields. strip() strips all blank characters from the beginning and end of a line. And a file in python is an iterable object which when iterated over by the keyword in , gives the lines in the file one by one. For more information on these, you can look at http://docs.python.org/2/library/stdtypes.html#str.split , http://docs.python.org/2/library/stdtypes.html#str.strip , http://docs.python.org/2/library/stdtypes.html#bltin-file-objects .

with open('test.txt') as infile:
  lines = [line.strip().split() for line in infile] # bad for large files
  col1, col2, col3, col4 = itertools.izip(*lines)

Now, each of the col s has all the entries for each of the four columns

Using csv module:

import csv 

nth = {
    1: "first",
    2: "second",
    3: "third",
    4: "fourth"
}

with open('test.txt', 'r') as f:
    reader = csv.reader(f, delimiter=" ")
    for row in reader:
        for index, item in enumerate(row):
            print "this is the %s column %s" % (nth[index + 1], item) 

And, the same without using csv :

nth = {
    1: "first",
    2: "second",
    3: "third",
    4: "fourth"
}

with open('test.txt', 'r') as f:
    for row in f:
        for index, item in enumerate(row.split()):
            print "this is the %s column %s" % (nth[index + 1], item.strip()) 

prints:

this is the first column AA11
this is the second column BB11
this is the third column CC11
this is the fourth column DD11
this is the first column AA22
this is the second column BB22
this is the third column CC22
this is the fourth column DD22
this is the first column AA33
this is the second column BB44
this is the third column CC44
this is the fourth column DD33

The answer of Subhasis Das is fine regarding the file opening, splitting and so on. But you wanted to have the values variables. That's easy, too. Instead of

fields = line.strip().split()

write

a,b,c,d = line.strip().split()

For lines with more or less than four columns, this will throw an exception, though.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM