Hướng dẫn extract table from text file python - trích xuất bảng từ tệp văn bản python

Bạn có văn bản thuần túy, nhưng bạn may mắn vì văn bản của bạn có một số định dạng, bạn có thể sử dụng:

import requests
import pandas as pd

txt_data = requests.get('https://downloads.usda.library.cornell.edu/usda-esmis/files/c821gj76b/n870zs10r/h989r4519/AgriPric-03-30-2017.txt').text
splited_data = txt_data.split('\n')

table_title = 'Prices Received for Field Crops and Fruits - United States: February 2017 with Comparisons'
END_TABLE_LINE = '-------------------------------------------'


def find_no_line_start_table(table_title,splited_data):
    found_no_lines = []
    for index, line in enumerate(splited_data):
        if table_title in line:
            found_no_lines.append(index)

    return found_no_lines

_, table_start = find_no_line_start_table(table_title,splited_data)


def get_start_data_table(table_start, splited_data):
    for index, row in enumerate(splited_data[table_start:]):
        if '(D)' in row:
            return table_start + index

def get_end_table(start_table_data, splited_data ):
    for index, row in enumerate(splited_data[start_table_data:]):
            if END_TABLE_LINE in row:
                return start_table_data + index

def row(l):
    l = l.split()
    number_columns = 5
    if len(l) >= number_columns: 
        data_row = [''] * number_columns
        first_column_done = False

        index = 0
        for w in l:
            if not first_column_done:
                data_row[0] = ' '.join([data_row[0], w])
                if ':' in w:
                        first_column_done = True
            else:
                index += 1
                data_row[index] = w

        return data_row

start_line = get_start_data_table(table_start, splited_data)
end_line = get_end_table(start_line, splited_data)

table = splited_data[start_line : end_line]

def take_table(txt_data):
    comodity = []
    price_2011 = []
    feb_2016 = []
    jan_2017 = []
    feb_2017 = []

    for r in table:
        data_row = row(r)
        if data_row:
            col_1, col_2, col_3, col_4, col_5 = data_row
            comodity.append(col_1)
            price_2011.append(col_2)
            feb_2016.append(col_3)
            jan_2017.append(col_4)
            feb_2017.append(col_5)

    table_data = {'comodity': comodity, 'price_2011': price_2011,
                  'feb_2016': feb_2016, 'jan_2017': jan_2017, 'feb_2017': feb_2017}
    return table_data

dict_table = take_table(txt_data)
pd.DataFrame(dict_table)

output:

Hướng dẫn extract table from text file python - trích xuất bảng từ tệp văn bản python

Bảng dài hơn nhiều (43 hàng)

Bạn có thể sử dụng Dict_Table hoặc Pandas DataFrame

# Nếu bạn muốn có được mọi thứ trong cột 3 ..

col_num = 2 ..fromdb() the source argument provides information about where to read the underlying data from. If the source argument is None or a string it is interpreted as follows:

  • col_data = []. - read from stdin
  • delimiter = "".
  • với Open ('Tệp. TXT') là F:.
  • col_data. append (f. readline (). split (delimiter) [col_num]).
  • Làm cách nào để đọc một phần cụ thể của một tệp trong Python?

Phương thức 1: FileObject.ReadLines () Một đối tượng tệp có thể được tạo trong python và sau đó readlines () phương thức có thể được gọi trên đối tượng này để đọc các dòng vào một luồng. Phương pháp này được ưa thích khi một dòng hoặc một phạm vi dòng từ tệp cần được truy cập đồng thời.

& nbsp;

Các chức năng sau đây trích xuất một bảng từ một nguồn hoặc cơ sở dữ liệu giống như tệp. Đối với tất cả mọi thứ ngoại trừ FromDB () đối số nguồn cung cấp thông tin về nơi đọc dữ liệu cơ bản từ đó. Nếu đối số nguồn không có hoặc một chuỗi, nó được giải thích như sau:

Không - Đọc từ Stdincsv.reader() function. Returns a table providing access to the data in the given delimited file. E.g.:

>>> import csv
>>> # set up a CSV file to demonstrate with
... with open('test.csv', 'wb') as f:
...     writer = csv.writer(f)
...     writer.writerow(['foo', 'bar'])
...     writer.writerow(['a', 1])
...     writer.writerow(['b', 2])
...     writer.writerow(['c', 2])
...
>>> # now demonstrate the use of petl.fromcsv
... from petl import fromcsv, look
>>> testcsv = fromcsv('test.csv')
>>> look(testcsv)
+-------+-------+
| 'foo' | 'bar' |
+=======+=======+
| 'a'   | '1'   |
+-------+-------+
| 'b'   | '2'   |
+-------+-------+
| 'c'   | '2'   |
+-------+-------+

Chuỗi bắt đầu với ‘http: //,‘ https: // ‘hoặc‘ ftp: // - đọc từ urlcsv.reader(). So, e.g., to override the delimiter from the default CSV dialect, provide the delimiter keyword argument.

Chuỗi kết thúc bằng ‘.gz, hoặc‘ .bgz, - đọc từ tệp qua giải nén GZIPconvert().

Hỗ trợ đọc trong suốt từ các tệp URL, .gz và .bz2..gz and .bz2 files.

Chuỗi kết thúc bằng ‘.bz2, - đọc từ tệp qua giải nén BZ2

Hàm tiện lợi, như fromcsv () nhưng với phương ngữ mặc định khác nhau (được phân định tab).fromcsv() but with different default dialect (tab delimited).

Hỗ trợ đọc trong suốt từ các tệp URL, .gz và .bz2..gz and .bz2 files.

Mới trong phiên bản 0.9.

petl.fromucsv (nguồn = không, phương ngữ =, mã hóa = 'utf-8', ** kwargs) ¶

Trả về một bảng chứa dữ liệu Unicode được trích xuất từ ​​một tệp được phân định thông qua mã hóa đã cho. Giống như từcsv () nhưng chấp nhận một đối số mã hóa bổ sung, đó là một trong những mã hóa được hỗ trợ của Python. Xem thêm codec.fromcsv() but accepts an additional encoding argument which should be one of the Python supported encodings. See also codecs.

Mới trong phiên bản 0.19.

petl.fromutsv (nguồn = không, phương ngữ =, ** kwargs) ¶

Hàm tiện lợi, như FromUcSv () nhưng với phương ngữ mặc định khác nhau (được phân định tab).fromucsv() but with different default dialect (tab delimited).

Mới trong phiên bản 0.19.

petl.fromutsv (nguồn = không, phương ngữ =, ** kwargs) ¶

Hàm tiện lợi, như FromUcSv () nhưng với phương ngữ mặc định khác nhau (được phân định tab).

Tệp Pickle

>>> import pickle
>>> # set up a file to demonstrate with
... with open('test.dat', 'wb') as f:
...     pickle.dump(['foo', 'bar'], f)
...     pickle.dump(['a', 1], f)
...     pickle.dump(['b', 2], f)
...     pickle.dump(['c', 2.5], f)
...
>>> # now demonstrate the use of petl.frompickle
... from petl import frompickle, look
>>> testdat = frompickle('test.dat')
>>> look(testdat)
+-------+-------+
| 'foo' | 'bar' |
+=======+=======+
| 'a'   | 1     |
+-------+-------+
| 'b'   | 2     |
+-------+-------+
| 'c'   | 2.5   |
+-------+-------+

Hỗ trợ đọc trong suốt từ các tệp URL, .gz và .bz2..gz and .bz2 files.

petl.frompickle (nguồn = không) ¶

Trả về một bảng cung cấp quyền truy cập vào dữ liệu ngâm trong tệp đã cho. Các hàng trong bảng đáng lẽ phải được đưa vào tệp một. Ví dụ.:

Tệp văn bản

>>> # example data
... with open('test.txt', 'w') as f:
...     f.write('a\t1\n')
...     f.write('b\t2\n')
...     f.write('c\t3\n')
... 
>>> from petl import fromtext, look
>>> table1 = fromtext('test.txt')
>>> look(table1)
+--------------+
| 'lines'      |
+==============+
| 'a\t1'      |
+--------------+
| 'b\t2'      |
+--------------+
| 'c\t3'      |
+--------------+

petl.fromtext (nguồn = không, tiêu đề = ['dòng'], dải = không) ¶fromtext() function provides a starting point for custom handling of text files. E.g., using capture():

>>> from petl import capture
>>> table2 = capture(table1, 'lines', '(.*)\\t(.*)$', ['foo', 'bar'])
>>> look(table2)
+-------+-------+
| 'foo' | 'bar' |
+=======+=======+
| 'a'   | '1'   |
+-------+-------+
| 'b'   | '2'   |
+-------+-------+
| 'c'   | '3'   |
+-------+-------+

Hỗ trợ đọc trong suốt từ các tệp URL, .gz và .bz2..gz and .bz2 files.

Xây dựng một bảng từ các dòng trong tệp văn bản đã cho. Ví dụ.:

Hàm FromText () cung cấp một điểm bắt đầu để xử lý các tệp văn bản tùy chỉnh. Ví dụ: sử dụng Capture ():

Đã thay đổi trong phiên bản 0.4.

Hàm dải () được gọi trên mỗi dòng, theo mặc định sẽ xóa khoảng trắng dẫn đầu và dấu vết, bao gồm ký tự cuối dòng-sử dụng đối số từ khóa dải để chỉ định các ký tự thay thế cho dải.fromtext() but accepts an additional encoding argument which should be one of the Python supported encodings. See also codecs.

Mới trong phiên bản 0.19.

petl.fromutsv (nguồn = không, phương ngữ =, ** kwargs) ¶

Hàm tiện lợi, như FromUcSv () nhưng với phương ngữ mặc định khác nhau (được phân định tab).

Tệp Pickle

>>> from petl import fromxml, look
>>> data = """...     ...         ...     ...  ...  ...  ...  ...  ...  ...  ...  ...  ... 
foobar
a1
b2
c2
"""
>>> with open('example1.xml', 'w') as f: ... f.write(data) ... f.close() ... >>> table1 = fromxml('example1.xml', 'tr', 'td') >>> look(table1) +-------+-------+ | 'foo' | 'bar' | +=======+=======+ | 'a' | '1' | +-------+-------+ | 'b' | '2' | +-------+-------+ | 'c' | '2' | +-------+-------+

petl.frompickle (nguồn = không) ¶

>>> data = """...     ...         ...     ...         ...     ...         ...     ...         ... 
...
...
...
...
"""
>>> with open('example2.xml', 'w') as f: ... f.write(data) ... f.close() ... >>> table2 = fromxml('example2.xml', 'tr', 'td', 'v') >>> look(table2) +-------+-------+ | 'foo' | 'bar' | +=======+=======+ | 'a' | '1' | +-------+-------+ | 'b' | '2' | +-------+-------+ | 'c' | '2' | +-------+-------+

Trả về một bảng cung cấp quyền truy cập vào dữ liệu ngâm trong tệp đã cho. Các hàng trong bảng đáng lẽ phải được đưa vào tệp một. Ví dụ.:

>>> data = """...     ...         a...     ...     ...         b...     ...     ...         c...     ... 
"""
>>> with open('example3.xml', 'w') as f: ... f.write(data) ... f.close() ... >>> table3 = fromxml('example3.xml', 'row', {'foo': 'foo', 'bar': ('baz/bar', 'v')}) >>> look(table3) +-------+------------+ | 'foo' | 'bar' | +=======+============+ | 'a' | ('1', '3') | +-------+------------+ | 'b' | '2' | +-------+------------+ | 'c' | '2' | +-------+------------+

Tệp văn bản

Hỗ trợ đọc trong suốt từ các tệp URL, .gz và .bz2..gz and .bz2 files.

petl.fromtext (nguồn = không, tiêu đề = ['dòng'], dải = không) ¶

Xây dựng một bảng từ các dòng trong tệp văn bản đã cho. Ví dụ.:If multiple elements match a given field, all values are reported as a tuple.

Hàm FromText () cung cấp một điểm bắt đầu để xử lý các tệp văn bản tùy chỉnh. Ví dụ: sử dụng Capture ():

Đã thay đổi trong phiên bản 0.4.

Hàm dải () được gọi trên mỗi dòng, theo mặc định sẽ xóa khoảng trắng dẫn đầu và dấu vết, bao gồm ký tự cuối dòng-sử dụng đối số từ khóa dải để chỉ định các ký tự thay thế cho dải.

>>> from petl import fromjson, look
>>> data = '[{"foo": "a", "bar": 1}, {"foo": "b", "bar": 2}, {"foo": "c", "bar": 2}]'
>>> with open('example1.json', 'w') as f:
...     f.write(data)
... 
>>> table1 = fromjson('example1.json')
>>> look(table1)
+--------+--------+
| u'foo' | u'bar' |
+========+========+
| u'a'   | 1      |
+--------+--------+
| u'b'   | 2      |
+--------+--------+
| u'c'   | 2      |
+--------+--------+

petl.fromutext (nguồn = khôngjson.load() and select the array to treat as the data, see also fromdicts().

Hỗ trợ đọc trong suốt từ các tệp URL, .gz và .bz2..gz and .bz2 files.

Xây dựng một bảng từ các dòng trong tệp văn bản đã cho thông qua mã hóa đã cho. Giống như FromText () nhưng chấp nhận một đối số mã hóa bổ sung, đó là một trong những mã hóa được hỗ trợ của Python. Xem thêm codec.

Tệp XML

petl.fromxml (nguồn, *args, ** kwargs) ¶dict as a table. E.g.:

>>> from petl import fromdicts, look
>>> dicts = [{"foo": "a", "bar": 1}, {"foo": "b", "bar": 2}, {"foo": "c", "bar": 2}]
>>> table = fromdicts(dicts)
>>> look(table)
+-------+-------+
| 'foo' | 'bar' |
+=======+=======+
| 'a'   | 1     |
+-------+-------+
| 'b'   | 2     |
+-------+-------+
| 'c'   | 2     |
+-------+-------+

Truy cập dữ liệu trong tệp XML. Ví dụ.:fromjson().

Xây dựng một bảng từ các dòng trong tệp văn bản đã cho thông qua mã hóa đã cho. Giống như FromText () nhưng chấp nhận một đối số mã hóa bổ sung, đó là một trong những mã hóa được hỗ trợ của Python. Xem thêm codec.

Tệp XML

petl.fromxml (nguồn, *args, ** kwargs) ¶

Truy cập dữ liệu trong tệp XML. Ví dụ.:sqlite3 database file via a given query. E.g.:

>>> import csv
>>> # set up a CSV file to demonstrate with
... with open('test.csv', 'wb') as f:
...     writer = csv.writer(f)
...     writer.writerow(['foo', 'bar'])
...     writer.writerow(['a', 1])
...     writer.writerow(['b', 2])
...     writer.writerow(['c', 2])
...
>>> # now demonstrate the use of petl.fromcsv
... from petl import fromcsv, look
>>> testcsv = fromcsv('test.csv')
>>> look(testcsv)
+-------+-------+
| 'foo' | 'bar' |
+=======+=======+
| 'a'   | '1'   |
+-------+-------+
| 'b'   | '2'   |
+-------+-------+
| 'c'   | '2'   |
+-------+-------+
0

Nếu các giá trị dữ liệu được lưu trữ trong một thuộc tính, hãy cung cấp tên thuộc tính như một đối số vị trí bổ sung, ví dụ:

Giá trị dữ liệu cũng có thể được trích xuất bằng cách cung cấp ánh xạ tên trường đến các đường dẫn phần tử, ví dụ:

Lưu ý rằng việc triển khai hiện không phát trực tuyến, tức là toàn bộ tài liệu được tải vào bộ nhớ.

Mới trong phiên bản 0.4.

>>> import csv
>>> # set up a CSV file to demonstrate with
... with open('test.csv', 'wb') as f:
...     writer = csv.writer(f)
...     writer.writerow(['foo', 'bar'])
...     writer.writerow(['a', 1])
...     writer.writerow(['b', 2])
...     writer.writerow(['c', 2])
...
>>> # now demonstrate the use of petl.fromcsv
... from petl import fromcsv, look
>>> testcsv = fromcsv('test.csv')
>>> look(testcsv)
+-------+-------+
| 'foo' | 'bar' |
+=======+=======+
| 'a'   | '1'   |
+-------+-------+
| 'b'   | '2'   |
+-------+-------+
| 'c'   | '2'   |
+-------+-------+
1

Đã thay đổi trong phiên bản 0.6: Nếu nhiều phần tử khớp với một trường đã cho, tất cả các giá trị được báo cáo là một tuple.

>>> import csv
>>> # set up a CSV file to demonstrate with
... with open('test.csv', 'wb') as f:
...     writer = csv.writer(f)
...     writer.writerow(['foo', 'bar'])
...     writer.writerow(['a', 1])
...     writer.writerow(['b', 2])
...     writer.writerow(['c', 2])
...
>>> # now demonstrate the use of petl.fromcsv
... from petl import fromcsv, look
>>> testcsv = fromcsv('test.csv')
>>> look(testcsv)
+-------+-------+
| 'foo' | 'bar' |
+=======+=======+
| 'a'   | '1'   |
+-------+-------+
| 'b'   | '2'   |
+-------+-------+
| 'c'   | '2'   |
+-------+-------+
2

Các tệp JSON

>>> import csv
>>> # set up a CSV file to demonstrate with
... with open('test.csv', 'wb') as f:
...     writer = csv.writer(f)
...     writer.writerow(['foo', 'bar'])
...     writer.writerow(['a', 1])
...     writer.writerow(['b', 2])
...     writer.writerow(['c', 2])
...
>>> # now demonstrate the use of petl.fromcsv
... from petl import fromcsv, look
>>> testcsv = fromcsv('test.csv')
>>> look(testcsv)
+-------+-------+
| 'foo' | 'bar' |
+=======+=======+
| 'a'   | '1'   |
+-------+-------+
| 'b'   | '2'   |
+-------+-------+
| 'c'   | '2'   |
+-------+-------+
3

Nếu các giá trị dữ liệu được lưu trữ trong một thuộc tính, hãy cung cấp tên thuộc tính như một đối số vị trí bổ sung, ví dụ:

Giá trị dữ liệu cũng có thể được trích xuất bằng cách cung cấp ánh xạ tên trường đến các đường dẫn phần tử, ví dụ:

>>> import csv
>>> # set up a CSV file to demonstrate with
... with open('test.csv', 'wb') as f:
...     writer = csv.writer(f)
...     writer.writerow(['foo', 'bar'])
...     writer.writerow(['a', 1])
...     writer.writerow(['b', 2])
...     writer.writerow(['c', 2])
...
>>> # now demonstrate the use of petl.fromcsv
... from petl import fromcsv, look
>>> testcsv = fromcsv('test.csv')
>>> look(testcsv)
+-------+-------+
| 'foo' | 'bar' |
+=======+=======+
| 'a'   | '1'   |
+-------+-------+
| 'b'   | '2'   |
+-------+-------+
| 'c'   | '2'   |
+-------+-------+
4

Lưu ý rằng việc triển khai hiện không phát trực tuyến, tức là toàn bộ tài liệu được tải vào bộ nhớ.

Mới trong phiên bản 0.4.

Đã thay đổi trong phiên bản 0.6: Nếu nhiều phần tử khớp với một trường đã cho, tất cả các giá trị được báo cáo là một tuple.

Các tệp JSON

petl.fromjson (nguồn, *args, ** kwargs) ¶

>>> import csv
>>> # set up a CSV file to demonstrate with
... with open('test.csv', 'wb') as f:
...     writer = csv.writer(f)
...     writer.writerow(['foo', 'bar'])
...     writer.writerow(['a', 1])
...     writer.writerow(['b', 2])
...     writer.writerow(['c', 2])
...
>>> # now demonstrate the use of petl.fromcsv
... from petl import fromcsv, look
>>> testcsv = fromcsv('test.csv')
>>> look(testcsv)
+-------+-------+
| 'foo' | 'bar' |
+=======+=======+
| 'a'   | '1'   |
+-------+-------+
| 'b'   | '2'   |
+-------+-------+
| 'c'   | '2'   |
+-------+-------+
5

Trích xuất dữ liệu từ tệp JSON. Tệp phải chứa một mảng JSON làm đối tượng cấp cao nhất và mỗi thành viên của mảng sẽ được coi là một hàng dữ liệu. Ví dụ.:

>>> import csv
>>> # set up a CSV file to demonstrate with
... with open('test.csv', 'wb') as f:
...     writer = csv.writer(f)
...     writer.writerow(['foo', 'bar'])
...     writer.writerow(['a', 1])
...     writer.writerow(['b', 2])
...     writer.writerow(['c', 2])
...
>>> # now demonstrate the use of petl.fromcsv
... from petl import fromcsv, look
>>> testcsv = fromcsv('test.csv')
>>> look(testcsv)
+-------+-------+
| 'foo' | 'bar' |
+=======+=======+
| 'a'   | '1'   |
+-------+-------+
| 'b'   | '2'   |
+-------+-------+
| 'c'   | '2'   |
+-------+-------+
6

Nếu tệp JSON của bạn không phù hợp với cấu trúc này, bạn sẽ cần phân tích nó qua json.load () và chọn mảng để xử lý dưới dạng dữ liệu, hãy xem từ FromDicts ().

  • http://initd.org/psycopg/docs/usage.html#server-side-cursors
  • Mới trong phiên bản 0.5.

Làm thế nào để bạn trích xuất dữ liệu từ một tệp văn bản trong Python?

Cách trích xuất các phần cụ thể của tệp văn bản bằng Python..
Hãy chắc chắn rằng bạn đang sử dụng Python 3 ..
Đọc dữ liệu từ một tệp văn bản ..
Sử dụng "với mở".
Đọc các tệp văn bản theo từng dòng ..
Lưu trữ dữ liệu văn bản trong một biến ..
Tìm kiếm văn bản cho một chuỗi con ..
Kết hợp các biểu thức thường xuyên ..
Để tất cả chúng cùng nhau..

Làm cách nào để chuyển đổi TXT thành DataFrame trong Python?

Chuyển đổi tệp văn bản thành DataFrame..
Pandas.Read_FWF - Đọc một bảng các dòng được định dạng có chiều rộng cố định vào DataFrame.pandas.read_fwf (filepath_or_buffer, colspecs = 'infress', widths = none, ** kwds).
gấu trúc.read_csv - đọc tệp CSV (được phân tách bằng dấu phẩy) vào DataFrame ..

Làm cách nào để trích xuất một cột từ một tệp văn bản trong Python?

Sau đó, bạn có thể làm điều này:..
# Nếu bạn muốn có được mọi thứ trong cột 3 ..
col_num = 2 ..
col_data = [].
delimiter = "".
với Open ('Tệp. TXT') là F:.
col_data.append (f. readline (). split (delimiter) [col_num]).

Làm cách nào để đọc một phần cụ thể của một tệp trong Python?

Phương thức 1: FileObject.ReadLines () Một đối tượng tệp có thể được tạo trong python và sau đó readlines () phương thức có thể được gọi trên đối tượng này để đọc các dòng vào một luồng.Phương pháp này được ưa thích khi một dòng hoặc một phạm vi dòng từ tệp cần được truy cập đồng thời.fileobject.readlines() A file object can be created in Python and then readlines() method can be invoked on this object to read lines into a stream. This method is preferred when a single line or a range of lines from a file needs to be accessed simultaneously.