so basically I need to read a file in, and display the result column by column, and example input and output is shown below, along with the my code.
this is the txt file:
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"
and this is the output:
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
and the below is my code, i got stuck at how to print the table out column by column:
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()
below is what I got doing: newlist.sort(), the name column is sorted, but the ID column is not. all these vales are reading from a txt file. I don't get why only the ID column is not sorted?
Column 0: Name
Annie
Benjamin
Jonathan
Kathryn
Rosemary
Tom
Column 1: ID
100
20
40
5
75
95
I have tried to convert the string using the "str()", but the result is the same
Another hint... If you want to iterate over columns instead of rows, transpose the data using zip
. I'll leave it up to you to get the data in the right format:
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)]
The above assumes Python 3 judging by your use of print()
as a function...
You can use python in-built csv module and save yourself a lot of nasty looking code.
import csv
data = open("data", "rb")
csv_dict = csv.DictReader(data, delimiter="\t", quotechar="\"")
This will give you an object that you can iterate over to get a dict of the values.
>>> 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'}
and you can get a list of the headers
>>> csv_dict.fieldnames
['Name', 'ID', 'City', 'Favorite Fruit']
Ok, here are some hints:
>>> 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']
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.