如何在Python中逐列读取txt文件的数据表
基本上,我需要读取一个文件,然后把结果一列一列地显示出来,下面有示例输入和输出,还有我的代码。
这是文本文件:
Name ID City Favorite Fruit
Benjamin 5 Copenhagen kiwi
Tom 100 Kingston "watermelon, apple"
Rosemary 20 Philadelphia "pineapple, mango"
Annie 95 East Setauket "blueberry, hawthorn"
Jonathan 75 Ithaca cherry
Kathryn 40 San Francisco "banana, strawberry"
这是输出结果:
Number of rows: 7
Number of columns: 4
Column 0: Name
1 Annie
1 Benjamin
1 Jonathan
1 Kathryn
1 Rosemary
1 Tom
Column 1: ID
1 5
1 20
1 40
1 75
1 95
1 100
Column 2: City
1 Copenhagen
1 East Setauket
1 Ithaca
1 Kingston
1 Philadelphia
1 San Francisco
Column 3: Favorite Fruit
1 "banana, strawberry"
1 "blueberry, hawthorn"
1 "pineapple, mango"
1 "watermelon, apple"
1 cherry
1 kiwi
下面是我的代码,我卡在了如何一列一列地打印表格:
import sys
def main():
alist =[]
data = open("a1input1.txt").read()
lines = data.split('\n')
totalline =len(lines)
print ("Number of low is: " + str(totalline))
column = lines[0].split('\t')
totalcolumn = len(column)
print ("Number of column is: " + str(totalcolumn))
for index in range(totalline):
column = lines[index].split('\t')
print (column)
main()
我尝试了使用 newlist.sort(),名字这一列是排好序的,但 ID 这一列却没有。所有这些值都是从文本文件中读取的。我不明白为什么只有 ID 列没有排序?
Column 0: Name
Annie
Benjamin
Jonathan
Kathryn
Rosemary
Tom
Column 1: ID
100
20
40
5
75
95
我尝试过用 "str()" 来转换字符串,但结果还是一样。
3 个回答
2
好的,这里有一些提示:
>>> s = 'a \tb \tc \td\ne \tf \tg \th'
>>> s.split()
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> s.split('\n')
['a \tb \tc \td', 'e \tf \tg \th']
>>> rows = [x.split() for x in s.split('\n')]
>>> rows
[['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']]
>>> [row[0] for row in rows]
['a', 'e']
>>> [row[1] for row in rows]
['b', 'f']
5
你可以使用Python自带的csv模块,这样可以省去很多看起来复杂的代码。
import csv
data = open("data", "rb")
csv_dict = csv.DictReader(data, delimiter="\t", quotechar="\"")
这样你会得到一个可以循环遍历的对象,方便你获取值的字典。
>>> for item in csv_dict:
... print item
...
{'City': 'Copenhagen', 'Favorite Fruit': 'kiwi', 'Name': 'Benjamin', 'ID': '5'}
{'City': 'Kingston', 'Favorite Fruit': 'watermelon, apple', 'Name': 'Tom', 'ID': '100'}
{'City': 'Philadelphia', 'Favorite Fruit': 'pineapple, mango', 'Name': 'Rosemary', 'ID': '20'}
{'City': 'East Setauket', 'Favorite Fruit': 'blueberry, hawthorn', 'Name': 'Annie', 'ID': ' 95'}
{'City': 'Ithaca', 'Favorite Fruit': 'cherry', 'Name': 'Jonathan', 'ID': '75'}
{'City': 'San Francisco', 'Favorite Fruit': 'banana, strawberry', 'Name': 'Kathryn', 'ID': '40'}
而且你还可以获取一个包含表头的列表。
>>> csv_dict.fieldnames
['Name', 'ID', 'City', 'Favorite Fruit']
4
还有一个提示……如果你想要遍历列而不是行,可以使用 zip
来转置数据。我就不多说了,数据格式你自己来调整一下吧:
data = [['a','b','c'],[1,2,3],[4,5,6],[7,8,9]]
print(data)
data = list(zip(*data))
print(data)
输出
[['a', 'b', 'c'], [1, 2, 3], [4, 5, 6], [7, 8, 9]]
[('a', 1, 4, 7), ('b', 2, 5, 8), ('c', 3, 6, 9)]
以上内容是基于你使用 print()
作为函数来判断你在用 Python 3……