简体   繁体   English

读取文件并将值存储到python中的变量中

[英]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: 假设我有一个文件名(test.txt),其中包含以下数据:

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

in bash (shell scripting) I can do the following: 在bash(shell脚本)中我可以执行以下操作:

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? 我怎么能用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 :) Python很容易:)

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. 更具体地说, split()将字符串的内容拆分为由某个分隔符分隔的字段(默认情况下为任何空白字符,例如空格,制表符等),并返回包含分割字段的数组。 strip() strips all blank characters from the beginning and end of a line. strip()从行的开头和结尾strip()所有空白字符。 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. python中的文件是一个iterable对象,当被关键字in迭代时,会逐个给出文件中的行。 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 . 有关这些的更多信息,你可以看看http://docs.python.org/2/library/stdtypes.html#str.splithttp://docs.python.org/2/library/stdtypes.html# str.striphttp: //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 现在,每个col都包含四列中每一col的所有条目

Using csv module: 使用csv模块:

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 : 并且,不使用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. 关于文件打开,分割等等,Subhasis Das的答案很好。 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. 但是对于具有多于或少于四列的行,这将抛出异常。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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