Как читать таблицу данных столбец за столбцом из текста в Python - PullRequest
1 голос
/ 07 февраля 2012

так что в основном мне нужно прочитать файл и отобразить результат столбец за столбцом, а пример ввода и вывода показан ниже вместе с моим кодом.

это текстовый файл:

  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 (), столбец имени отсортирован, а столбец идентификатора - нет.все эти вейлы читаются из текстового файла.Я не понимаю, почему не сортируется только столбец идентификатора?

Column 0: Name
Annie
Benjamin
Jonathan
Kathryn
Rosemary
Tom
Column 1: ID
100
20
40
5
75
95

Я пытался преобразовать строку, используя "str ()", но результат тот же

Ответы [ 3 ]

3 голосов
/ 07 февраля 2012

Еще один совет ... Если вы хотите перебирать столбцы, а не строки, транспонируйте данные, используя 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)]

Выше предполагается Python 3, судя по использованию print() в качествефункция ...

3 голосов
/ 07 февраля 2012

Вы можете использовать встроенный в 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']
2 голосов
/ 07 февраля 2012

Хорошо, вот несколько подсказок:

>>> 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...