Tab выделил Python 3 для чтения .txt файла - PullRequest
0 голосов
/ 29 марта 2012

У меня проблемы с началом работы.Нам выдается файл с выделенной вкладкой .txt, содержащий 6 столбцов данных и около 50 строк этих данных.Мне нужна помощь в создании списка для хранения этих данных для последующего отзыва.В конце концов мне нужно будет иметь возможность перечислить все содержимое любого конкретного столбца и отсортировать его, сосчитать его и т. Д. Любая помощь будет оценена.

Редактировать;Я действительно ничего не сделал, кроме исследований такого рода вещей, я плохо разбираюсь в csv, и раньше я делал файлы с одним столбцом .txt, но я не уверен, как справиться с этой ситуацией.Как я буду давать имена отдельным столбцам?как я скажу программе, когда заканчивается одна строка и начинается следующая?

Ответы [ 4 ]

2 голосов
/ 29 марта 2012

Структура данных в Pandas в основном делает именно то, что вы хотите. Это очень похоже на фрейм данных в R, если вы знакомы с этим. Он имеет встроенные параметры для поднабора, сортировки и других операций с табличными данными.

Он читает непосредственно из csv и даже автоматически читает имена столбцов. Вы бы позвонили:

read_csv(yourfilename, 
         sep='\t',     # makes it tab delimited
         header=1)     # makes the first row the header row.

Работает в Python 3.

1 голос
/ 29 марта 2012

Допустим, у вас есть CSV, как показано ниже.

 1       2       3       4       5       6
 1       2       3       4       5       6
 1       2       3       4       5       6
 1       2       3       4       5       6
 1       2       3       4       5       6

Вы можете прочитать их в словарь так:

>>> import csv
>>> reader = csv.DictReader(open('test.csv','r'), fieldnames= ['col1', 'col2', 'col3', 'col4', 'col5', 'col6'],  dialect='excel-tab')
>>> for row in reader:
...     print row    
{'col6': '6', 'col4': '4', 'col5': '5', 'col2': '2', 'col3': '3', 'col1': '1'}   
{'col6': '6', 'col4': '4', 'col5': '5', 'col2': '2', 'col3': '3', 'col1': '1'}   
{'col6': '6', 'col4': '4', 'col5': '5', 'col2': '2', 'col3': '3', 'col1': '1'}   
{'col6': '6', 'col4': '4', 'col5': '5', 'col2': '2', 'col3': '3', 'col1': '1'}   
{'col6': '6', 'col4': '4', 'col5': '5', 'col2': '2', 'col3': '3', 'col1': '1'}   

Но для этого лучше подойдет библиотека Pandas. http://pandas.pydata.org/pandas-docs/stable/io.html#csv-text-files

0 голосов
/ 29 марта 2012

Я думаю, использование БД для 50 строк и 6 столбцов - это излишне, поэтому вот моя идея:

from __future__ import print_function
import os
from operator import itemgetter


def get_records_from_file(path_to_file):
    """
    Read a tab-deliminated file and return a
    list of dictionaries representing the data.
    """
    records = []
    with open(path_to_file, 'r') as f:
        # Use the first line to get names for columns
        fields = [e.lower() for e in f.readline().split('\t')]

        # Iterate over the rest of the lines and store records
        for line in f:
            record = {}
            for i, field in enumerate(line.split('\t')):
                record[fields[i]] = field
            records.append(record)

    return records


if __name__ == '__main__':
    path = os.path.join(os.getcwd(), 'so.txt')
    records = get_records_from_file(path)

    print('Number of records: {0}'.format(len(records)))

    s = sorted(records, key=itemgetter('id'))
    print('Sorted: {0}'.format(s))

Для хранения записей для дальнейшего использования, загляните в библиотеку Python pickle -это позволит вам сохранить их как объекты Python.

Кроме того, обратите внимание, что на компьютере, которым я сейчас пользуюсь, не установлен Python 3, но я уверен, что это сработает.на Python 2 или 3.

0 голосов
/ 29 марта 2012

Похоже, работа лучше подходит для базы данных.Вам просто нужно использовать что-то вроде операции PostgreSQLs COPY FROM, чтобы импортировать данные CSV в таблицу, а затем использовать python + SQL для всех ваших потребностей в сортировке, поиске и сопоставлении.такие опции, как SQLlite и BerkleyDB, оба из которых имеют модули Python.

РЕДАКТИРОВАТЬ: BerkelyDB устарела, но anydbm похожа на концепцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...