Hướng dẫn how to read specific data from text file in python - cách đọc dữ liệu cụ thể từ tệp văn bản trong python

Giúp tôi, tôi có một tệp dữ liệu.txt. và tôi muốn đọc dữ liệu cụ thể trong tệp đó

def find_value(caption_header, fs_header, caption_value, fp):
    fs = None
    with open(fp) as fid:
        headers = fid.readline().strip().split()
        for i, h in enumerate(headers):
            if h == caption_header:
                caption_position = i
            if h == fs_header:
                fs_position = i
        line = fid.readline()
        while line != '':
            values = line.strip().split()
            if values[caption_position] == caption_value:
                fs = values[fs_position]
                break
    return fs
6 đó là dữ liệu không gian tự do trong thư mục C. Đây là nội dung của tệp dữ liệu của tôi.txt của tôi:

  Caption  FreeSpace     Size          
   C:      112652447744  146776518656  
   D:      295803727872  299962986496  
   E:                                   
   Z:                                   

Hỏi ngày 27 tháng 10 năm 2016 lúc 10:02Oct 27, 2016 at 10:02

Hướng dẫn how to read specific data from text file in python - cách đọc dữ liệu cụ thể từ tệp văn bản trong python

Erna Piantarierna PiantariErna Piantari

5371 Huy hiệu vàng11 Huy hiệu bạc26 Huy hiệu đồng1 gold badge11 silver badges26 bronze badges

3

Bạn có thể đọc từng dòng (bỏ qua đầu tiên) và tách nó bằng khoảng trắng để lấy từng cột. Bằng cách này, bạn có thể trích xuất kích thước và không gian trống cho từng phân vùng:

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])

Điều đó sẽ cung cấp cho bạn không gian trống và kích thước cho mọi phân vùng trong từ điển. Để có được kết quả thực tế của bạn, nó sẽ là:

part_data['C:'][0]

Nếu bạn chỉ muốn cột thứ hai và hàng thứ hai, hãy bỏ qua ký tự ổ đĩa, bạn có thể giảm nó thành phần sau:

contents = # here go the file contents
second_line = contents.splitlines()[1]
second_column = second_line.split()[1]

Có bạn đi, nhưng điều đó đòi hỏi nó luôn luôn định dạng giống nhau. Nếu dòng thứ hai không có ba cột, nó sẽ không thực sự hoạt động và gây ra

def find_value(caption_header, fs_header, caption_value, fp):
    fs = None
    with open(fp) as fid:
        headers = fid.readline().strip().split()
        for i, h in enumerate(headers):
            if h == caption_header:
                caption_position = i
            if h == fs_header:
                fs_position = i
        line = fid.readline()
        while line != '':
            values = line.strip().split()
            if values[caption_position] == caption_value:
                fs = values[fs_position]
                break
    return fs
7 rất có thể.

Lưu ý rằng

def find_value(caption_header, fs_header, caption_value, fp):
    fs = None
    with open(fp) as fid:
        headers = fid.readline().strip().split()
        for i, h in enumerate(headers):
            if h == caption_header:
                caption_position = i
            if h == fs_header:
                fs_position = i
        line = fid.readline()
        while line != '':
            values = line.strip().split()
            if values[caption_position] == caption_value:
                fs = values[fs_position]
                break
    return fs
8 sẽ tự động xóa tất cả khoảng trắng, trong khi
def find_value(caption_header, fs_header, caption_value, fp):
    fs = None
    with open(fp) as fid:
        headers = fid.readline().strip().split()
        for i, h in enumerate(headers):
            if h == caption_header:
                caption_position = i
            if h == fs_header:
                fs_position = i
        line = fid.readline()
        while line != '':
            values = line.strip().split()
            if values[caption_position] == caption_value:
                fs = values[fs_position]
                break
    return fs
9 cũng sẽ trả lại khoảng trắng trong đó.

Đã trả lời ngày 27 tháng 10 năm 2016 lúc 10:13Oct 27, 2016 at 10:13

2

Thử cái này:

#Open file in lines
file = open('path/to/txt','r').readlines()
#For each line
for disk in file:
    fields = disk.split("\t")
    #To check the total fields...
    if(len(fields)>1):

        print fields[1]

Đã trả lời ngày 27 tháng 10 năm 2016 lúc 10:24Oct 27, 2016 at 10:24

Hướng dẫn how to read specific data from text file in python - cách đọc dữ liệu cụ thể từ tệp văn bản trong python

Câu hỏi của bạn không nói như vậy, nhưng tôi có thể cho rằng bạn muốn "tra cứu" giá trị đại diện cho FreeSpace trong hàng mà chú thích là C :?

Trừ khi bạn cần dữ liệu trong tệp cho một cái gì đó khác, chỉ cần đọc trong từng dòng tệp cho đến khi bạn nhận được kết quả của mình. Dòng đầu tiên sẽ là hàng tiêu đề của bạn và bạn sử dụng vị trí của 'caption_header' và 'fs_header' để phân tích từng hàng dữ liệu tiếp theo.

Trong ví dụ của bạn, điều này có nghĩa là chúng tôi muốn kiểm tra nếu giá trị đầu tiên của mỗi hàng chứa C :, và nếu vậy câu trả lời chúng tôi đang tìm kiếm sẽ nằm trong cột thứ hai. Nếu chúng ta tìm thấy câu trả lời thì không cần phải tìm kiếm phần còn lại của các hàng.

def find_value(caption_header, fs_header, caption_value, fp):
    fs = None
    with open(fp) as fid:
        headers = fid.readline().strip().split()
        for i, h in enumerate(headers):
            if h == caption_header:
                caption_position = i
            if h == fs_header:
                fs_position = i
        line = fid.readline()
        while line != '':
            values = line.strip().split()
            if values[caption_position] == caption_value:
                fs = values[fs_position]
                break
    return fs

Sau đó sử dụng nó như thế này:

fs = find_value('Caption', 'FreeSpace', 'C:')

Đã trả lời ngày 27 tháng 10 năm 2016 lúc 10:39Oct 27, 2016 at 10:39

BenbenBen

1.5141 Huy hiệu vàng15 Huy hiệu bạc21 Huy hiệu đồng1 gold badge15 silver badges21 bronze badges

Cập nhật: 30/06/2020 bởi06/30/2020 by

Hướng dẫn how to read specific data from text file in python - cách đọc dữ liệu cụ thể từ tệp văn bản trong python

Trích xuất văn bản từ một tệp là một nhiệm vụ phổ biến trong kịch bản và lập trình, và Python làm cho nó dễ dàng. Trong hướng dẫn này, chúng tôi sẽ thảo luận về một số cách đơn giản để trích xuất văn bản từ một tệp bằng ngôn ngữ lập trình Python 3.

Hãy chắc chắn rằng bạn đang sử dụng Python 3

Trong hướng dẫn này, chúng tôi sẽ sử dụng Python phiên bản 3. Hầu hết các hệ thống được cài đặt sẵn với Python 2.7. Trong khi Python 2.7 được sử dụng trong mã kế thừa, Python 3 là hiện tại và tương lai của ngôn ngữ Python. Trừ khi bạn có một lý do cụ thể để viết hoặc hỗ trợ Python 2, chúng tôi khuyên bạn nên làm việc trong Python 3.

Đối với Microsoft Windows, Python 3 có thể được tải xuống từ trang web chính thức của Python. Khi cài đặt, hãy đảm bảo "Trình khởi chạy cài đặt cho tất cả người dùng" và "Thêm các tùy chọn Python vào đường dẫn" đều được kiểm tra, như trong hình ảnh bên dưới.

Hướng dẫn how to read specific data from text file in python - cách đọc dữ liệu cụ thể từ tệp văn bản trong python

Trên Linux, bạn có thể cài đặt Python 3 với trình quản lý gói của mình. Chẳng hạn, trên Debian hoặc Ubuntu, bạn có thể cài đặt nó bằng lệnh sau:

sudo apt-get update && sudo apt-get install python3

Đối với macOS, trình cài đặt Python 3 có thể được tải xuống từ python.org, như được liên kết ở trên. Nếu bạn đang sử dụng Trình quản lý gói Homebrew, nó cũng có thể được cài đặt bằng cách mở cửa sổ đầu cuối (Ứng dụng → Tiện ích) và chạy lệnh này:ApplicationsUtilities), and running this command:

brew install python3

Chạy Python

Trên Linux và MacOS, lệnh để chạy trình thông dịch Python 3 là Python3. Trên Windows, nếu bạn đã cài đặt trình khởi chạy, lệnh là PY. Các lệnh trên trang này sử dụng python3; Nếu bạn đang ở trên Windows, hãy thay thế PY cho Python3 trong tất cả các lệnh.python3. On Windows, if you installed the launcher, the command is py. The commands on this page use python3; if you're on Windows, substitute py for python3 in all commands.

Chạy Python không có tùy chọn bắt đầu trình thông dịch tương tác. Để biết thêm thông tin về việc sử dụng trình thông dịch, hãy xem Tổng quan về Python: Sử dụng trình thông dịch Python. Nếu bạn vô tình nhập trình thông dịch, bạn có thể thoát nó bằng lệnh thoát ra lệnh () hoặc thoát ().exit() or quit().

Chạy Python với một tên tệp sẽ diễn giải chương trình Python đó. Ví dụ:

python3 program.py

... Chạy chương trình có trong chương trình tệp.py.program.py.

Được rồi, làm thế nào chúng ta có thể sử dụng Python để trích xuất văn bản từ tệp văn bản?

Đọc dữ liệu từ tệp văn bản

Đầu tiên, chúng ta hãy đọc một tệp văn bản. Giả sử chúng tôi đang làm việc với một tệp có tên Lorem.txt, trong đó chứa các dòng từ văn bản ví dụ Lorem ipsum.lorem.txt, which contains lines from the Lorem Ipsum example text.

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])
0

Ghi chú

Trong tất cả các ví dụ tiếp theo, chúng tôi làm việc với bốn dòng văn bản có trong tệp này. Sao chép và dán văn bản Latin ở trên vào tệp văn bản và lưu nó dưới dạng Lorem.txt, để bạn có thể chạy mã ví dụ bằng tệp này làm đầu vào.lorem.txt, so you can run the example code using this file as input.

Một chương trình Python có thể đọc một tệp văn bản bằng hàm Open () tích hợp. Ví dụ: chương trình Python 3 bên dưới sẽ mở Lorem.txt để đọc ở chế độ văn bản, đọc nội dung thành một biến chuỗi có tên Nội dung, đóng tệp và in dữ liệu.open() function. For example, the Python 3 program below opens lorem.txt for reading in text mode, reads the contents into a string variable named contents, closes the file, and prints the data.

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])
1

Ở đây, MyFile là tên chúng tôi đặt cho đối tượng tệp của chúng tôi.myfile is the name we give to our file object.

Tham số "RT" trong hàm Open () có nghĩa là "Chúng tôi đang mở tệp này để đọc dữ liệu văn bản"rt" parameter in the open() function means "we're opening this file to read text data"

Dấu băm ("#") có nghĩa là mọi thứ trên dòng đó đều là một nhận xét và nó bị thông dịch viên Python bỏ qua.#") means that everything on that line is a comment, and it's ignored by the Python interpreter.

Nếu bạn lưu chương trình này trong một tệp có tên Read.py, bạn có thể chạy nó bằng lệnh sau.read.py, you can run it with the following command.

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])
2

Lệnh trên xuất ra nội dung của lorem.txt:lorem.txt:

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])
0

Sử dụng "với mở"

Điều quan trọng là đóng các tệp mở của bạn càng sớm càng tốt: Mở tệp, thực hiện thao tác của bạn và đóng nó. Đừng để nó mở trong thời gian dài.

Khi bạn làm việc với các tập tin, việc sử dụng với ... làm tuyên bố ghép là tốt. Đó là cách sạch nhất để mở một tệp, hoạt động trên nó và đóng tệp, tất cả trong một khối mã dễ đọc. Tệp được tự động đóng khi khối mã hoàn thành.

Sử dụng với Open ... As, chúng ta có thể viết lại chương trình của mình để trông như thế này:with open...as, we can rewrite our program to look like this:

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])
4

Ghi chú

Th thụt lề là quan trọng trong Python. Các chương trình Python sử dụng không gian trắng ở đầu một dòng để xác định phạm vi, chẳng hạn như một khối mã. Chúng tôi khuyên bạn nên sử dụng bốn không gian cho mỗi cấp độ thụt và bạn sử dụng không gian thay vì các tab. Trong các ví dụ sau, hãy đảm bảo mã của bạn được thụt vào chính xác như được trình bày ở đây.

Thí dụ

Lưu chương trình dưới dạng Read.py và thực hiện nó:read.py and execute it:

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])
2

Output:

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])
0

Đọc các tệp văn bản theo từng dòng

Trong các ví dụ cho đến nay, chúng tôi đã đọc trong toàn bộ tập tin cùng một lúc. Đọc một tệp đầy đủ không phải là vấn đề lớn với các tệp nhỏ, nhưng nói chung, đó không phải là một ý tưởng tuyệt vời. Đối với một điều, nếu tệp của bạn lớn hơn số lượng bộ nhớ có sẵn, bạn sẽ gặp phải lỗi.

Trong hầu hết mọi trường hợp, bạn nên đọc tệp văn bản một dòng tại một thời điểm tốt hơn.

Trong Python, đối tượng tệp là một trình lặp. Một người lặp là một loại đối tượng Python hoạt động theo những cách nhất định khi được vận hành liên tục. Chẳng hạn, bạn có thể sử dụng một vòng lặp For để hoạt động trên đối tượng tệp nhiều lần và mỗi lần thực hiện thao tác tương tự, bạn sẽ nhận được kết quả khác nhau hoặc "tiếp theo".

Thí dụ

Lưu chương trình dưới dạng Read.py và thực hiện nó:

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])
7

Output:

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])
8

Đọc các tệp văn bản theo từng dòng

Trong các ví dụ cho đến nay, chúng tôi đã đọc trong toàn bộ tập tin cùng một lúc. Đọc một tệp đầy đủ không phải là vấn đề lớn với các tệp nhỏ, nhưng nói chung, đó không phải là một ý tưởng tuyệt vời. Đối với một điều, nếu tệp của bạn lớn hơn số lượng bộ nhớ có sẵn, bạn sẽ gặp phải lỗi.

Trong hầu hết mọi trường hợp, bạn nên đọc tệp văn bản một dòng tại một thời điểm tốt hơn.

Trong Python, đối tượng tệp là một trình lặp. Một người lặp là một loại đối tượng Python hoạt động theo những cách nhất định khi được vận hành liên tục. Chẳng hạn, bạn có thể sử dụng một vòng lặp For để hoạt động trên đối tượng tệp nhiều lần và mỗi lần thực hiện thao tác tương tự, bạn sẽ nhận được kết quả khác nhau hoặc "tiếp theo".

Thí dụ

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])
9

Lưu chương trình dưới dạng Read.py và thực hiện nó:

Output:

part_data['C:'][0]
0

Đọc các tệp văn bản theo từng dòng\n.

Trong các ví dụ cho đến nay, chúng tôi đã đọc trong toàn bộ tập tin cùng một lúc. Đọc một tệp đầy đủ không phải là vấn đề lớn với các tệp nhỏ, nhưng nói chung, đó không phải là một ý tưởng tuyệt vời. Đối với một điều, nếu tệp của bạn lớn hơn số lượng bộ nhớ có sẵn, bạn sẽ gặp phải lỗi.

Ghi chú

Trong hầu hết mọi trường hợp, bạn nên đọc tệp văn bản một dòng tại một thời điểm tốt hơn.

Thí dụ

Lưu chương trình dưới dạng Read.py và thực hiện nó:lines by specifying index number 0, contained in brackets after the name of the list:

part_data['C:'][0]
1

Output:

part_data['C:'][0]
2

Thí dụ

Hoặc dòng thứ ba, bằng cách chỉ định chỉ mục số 2:

part_data['C:'][0]
3

Output:

part_data['C:'][0]
4

Nhưng nếu chúng ta cố gắng truy cập một chỉ mục mà không có giá trị, chúng ta sẽ gặp lỗi:

Thí dụ

part_data['C:'][0]
5

Output:

part_data['C:'][0]
6

Thí dụ

Một đối tượng danh sách là một trình lặp, vì vậy để in mọi yếu tố của danh sách, chúng ta có thể lặp lại nó với ... trong:for...in:

part_data['C:'][0]
7

Output:

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])
8

Nhưng chúng tôi vẫn đang nhận được thêm dòng mới. Mỗi dòng của tệp văn bản của chúng tôi kết thúc bằng một ký tự dòng mới ('\ n'), đang được in. Ngoài ra, sau khi in từng dòng, in () thêm một dòng mới của riêng mình, trừ khi bạn bảo nó làm khác.\n'), which is being printed. Also, after printing each line, print() adds a newline of its own, unless you tell it to do otherwise.

Chúng tôi có thể thay đổi hành vi mặc định này bằng cách chỉ định tham số cuối trong cuộc gọi in () của chúng tôi:end parameter in our print() call:

part_data['C:'][0]
9

Bằng cách đặt kết thúc thành một chuỗi trống (hai trích dẫn đơn, không có khoảng trống), chúng tôi nói với Print () để in không có gì ở cuối dòng, thay vì một ký tự mới.end to an empty string (two single quotes, with no space), we tell print() to print nothing at the end of a line, instead of a newline character.

Thí dụ

Chương trình sửa đổi của chúng tôi trông như thế này:

contents = # here go the file contents
second_line = contents.splitlines()[1]
second_column = second_line.split()[1]
0

Output:

contents = # here go the file contents
# split the text file into lines and ignore the first line
lines = contents.splitlines()[1:]
part_data = {}
for line in lines:
    columns = line.split()  # split the lines along the white space characters
    if len(columns) != 3:
        continue  # incomplete lines
    part_data[columns[0]] = (columns[1], columns[2])
0

Các dòng mới mà bạn thấy ở đây thực sự có trong tập tin; Chúng là một nhân vật đặc biệt ('\ n') ở cuối mỗi dòng. Chúng tôi muốn loại bỏ những thứ này, vì vậy chúng tôi không phải lo lắng về chúng trong khi chúng tôi xử lý tệp.\n') at the end of each line. We want to get rid of these, so we don't have to worry about them while we process the file.

Cách tước dòng mới

Để loại bỏ hoàn toàn các dòng mới, chúng ta có thể tước chúng. Để tước một chuỗi là loại bỏ một hoặc nhiều ký tự, thường là khoảng trắng, từ đầu hoặc cuối chuỗi.strip a string is to remove one or more characters, usually whitespace, from either the beginning or end of the string.

Mẹo

Quá trình này đôi khi cũng được gọi là "Trimming."

Python 3 Đối tượng chuỗi có một phương thức gọi là rstrip (), dải các ký tự từ phía bên phải của chuỗi. Ngôn ngữ tiếng Anh đọc từ trái sang phải, vì vậy tước từ phía bên phải sẽ loại bỏ các ký tự từ cuối.rstrip(), which strips characters from the right side of a string. The English language reads left-to-right, so stripping from the right side removes characters from the end.

Nếu biến được đặt tên là myString, chúng ta có thể tước bên phải của nó bằng myString.rstrip (chars), trong đó chars là một chuỗi các ký tự để dải. Ví dụ: "123abc" .rstrip ("bc") trả về 123a.mystring, we can strip its right side with mystring.rstrip(chars), where chars is a string of characters to strip. For example, "123abc".rstrip("bc") returns 123a.

Mẹo

Quá trình này đôi khi cũng được gọi là "Trimming."Hello) in double-quotes ("Hello"). If you're representing a single character (such as b), or a single special character such as the newline character (\n), it's traditional to use single quotes ('b', '\n'). For more information about how to use strings in Python, you can read the documentation of strings in Python.

Python 3 Đối tượng chuỗi có một phương thức gọi là rstrip (), dải các ký tự từ phía bên phải của chuỗi. Ngôn ngữ tiếng Anh đọc từ trái sang phải, vì vậy tước từ phía bên phải sẽ loại bỏ các ký tự từ cuối.string.rstrip('\n') will strip a newline character from the right side of string. The following version of our program strips the newlines when each line is read from the text file:

contents = # here go the file contents
second_line = contents.splitlines()[1]
second_column = second_line.split()[1]
2

Nếu biến được đặt tên là myString, chúng ta có thể tước bên phải của nó bằng myString.rstrip (chars), trong đó chars là một chuỗi các ký tự để dải. Ví dụ: "123abc" .rstrip ("bc") trả về 123a.

Khi bạn đại diện cho một chuỗi trong chương trình của bạn với nội dung theo nghĩa đen của nó, nó được gọi là một chuỗi theo nghĩa đen. Trong Python (như trong hầu hết các ngôn ngữ lập trình), các chữ viết luôn được trích dẫn - được đặt ở hai bên theo trích dẫn đơn (') hoặc double ("). Trong Python, trích dẫn đơn và đôi tương đương; Miễn là chúng khớp với cả hai đầu của chuỗi. Đó là truyền thống để đại diện cho một chuỗi có thể đọc được của con người (chẳng hạn như Hello) trong các trình điều khiển kép ("Xin chào"). Nếu bạn đại diện cho một ký tự duy nhất (như B), như B), Hoặc một ký tự đặc biệt duy nhất như ký tự dòng mới (\ n), sử dụng các trích dẫn đơn lẻ ('B', '\ n') truyền thống về cách sử dụng chuỗi trong Python, bạn có thể đọc tài liệu về chuỗi Trong Python.

Chuỗi statement.rstrip ('\ n') sẽ tước một ký tự dòng mới từ phía bên phải của chuỗi. Phiên bản sau của chương trình của chúng tôi dải các dòng mới khi mỗi dòng được đọc từ tệp văn bản:

Văn bản hiện được lưu trữ trong một biến danh sách, vì vậy các dòng riêng lẻ có thể được truy cập bằng số chỉ mục. Newlines đã bị tước, vì vậy chúng tôi không phải lo lắng về chúng. Chúng ta luôn có thể đặt chúng trở lại sau nếu chúng ta xây dựng lại tệp và viết nó vào đĩa.

Bây giờ, chúng ta hãy tìm kiếm các dòng trong danh sách cho một chuỗi con cụ thể.find(), which locates the first occurrence of a substrings in the string.

Tìm kiếm văn bản cho một nền tảngfind() method to search for the letter "e" in the first line of our text file, which is stored in the list mylines. The first element of mylines is a string object containing the first line of the text file. This string object has a find() method.

Giả sử chúng tôi muốn định vị mọi sự xuất hiện của một cụm từ nhất định, hoặc thậm chí một chữ cái. Ví dụ, có lẽ chúng ta cần biết mọi "E" ở đâu. Chúng ta có thể thực hiện điều này bằng phương thức Find () của chuỗi.find(), we specify parameters. The first and only required parameter is the string to search for, "e". The statement mylines[0].find("e") tells the interpreter to search forward, starting at the beginning of the string, one character at a time, until it finds the letter "e." When it finds one, it stops searching, and returns the index number where that "e" is located. If it reaches the end of the string, it returns -1 to indicate nothing was found.

Thí dụ

contents = # here go the file contents
second_line = contents.splitlines()[1]
second_column = second_line.split()[1]
3

Output:

3

Danh sách lưu trữ từng dòng văn bản của chúng tôi dưới dạng đối tượng chuỗi. Tất cả các đối tượng chuỗi có một phương thức, find (), định vị sự xuất hiện đầu tiên của một chuỗi con trong chuỗi.

Chúng ta hãy sử dụng phương thức Find () để tìm kiếm chữ cái "E" trong dòng đầu tiên của tệp văn bản của chúng tôi, được lưu trữ trong danh sách Mylines. Phần tử đầu tiên của mylines là một đối tượng chuỗi chứa dòng đầu tiên của tệp văn bản. Đối tượng chuỗi này có phương thức Find ().find() method takes two optional, additional parameters: a start index and a stop index, indicating where in the string the search should begin and end. For instance, string.find("abc", 10, 20) searches for the substring "abc", but only from the 11th to the 21st character. If stop is not specified, find() starts at index start, and stops at the end of the string.

Thí dụ

Chẳng hạn, câu lệnh sau tìm kiếm "E" trong Mylines [0], bắt đầu từ ký tự thứ năm.mylines[0], beginning at the fifth character.

contents = # here go the file contents
second_line = contents.splitlines()[1]
second_column = second_line.split()[1]
4

Output:

contents = # here go the file contents
second_line = contents.splitlines()[1]
second_column = second_line.split()[1]
5

Nói cách khác, bắt đầu từ ký tự thứ 5 trong dòng [0], "E" đầu tiên được đặt tại Index 24 ("E" trong "NEC").

Thí dụ

Để bắt đầu tìm kiếm tại INDEX 10 và dừng tại INDEX 30:

contents = # here go the file contents
second_line = contents.splitlines()[1]
second_column = second_line.split()[1]
6

Output:

contents = # here go the file contents
second_line = contents.splitlines()[1]
second_column = second_line.split()[1]
7

("E" đầu tiên trong "Maecenas").

Nếu tìm () không định vị chuỗi con trong phạm vi tìm kiếm, nó sẽ trả về số -1, cho biết thất bại:find() doesn't locate the substring in the search range, it returns the number -1, indicating failure:

contents = # here go the file contents
second_line = contents.splitlines()[1]
second_column = second_line.split()[1]
8

Output:

-1

Không có sự xuất hiện "E" giữa các chỉ số 25 và 30.

Tìm thấy tất cả các sự cố của một chuỗi con

Nhưng điều gì sẽ xảy ra nếu chúng ta muốn định vị mọi sự xuất hiện của một nền tảng, không chỉ là lần đầu tiên chúng ta gặp phải? Chúng ta có thể lặp lại chuỗi, bắt đầu từ chỉ mục của trận đấu trước.

Trong ví dụ này, chúng tôi sẽ sử dụng một vòng lặp trong thời gian để liên tục tìm thấy chữ "E". Khi tìm thấy sự xuất hiện, chúng tôi gọi lại tìm lại, bắt đầu từ một vị trí mới trong chuỗi. Cụ thể, vị trí của lần xuất hiện cuối cùng, cộng với chiều dài của chuỗi (vì vậy chúng ta có thể di chuyển về phía trước qua cái cuối cùng). Khi tìm trả về -1 hoặc chỉ mục bắt đầu vượt quá độ dài của chuỗi, chúng tôi dừng lại.find the letter "e". When an occurrence is found, we call find again, starting from a new location in the string. Specifically, the location of the last occurrence, plus the length of the string (so we can move forward past the last one). When find returns -1, or the start index exceeds the length of the string, we stop.

contents = # here go the file contents
second_line = contents.splitlines()[1]
second_column = second_line.split()[1]
9

Output:

#Open file in lines
file = open('path/to/txt','r').readlines()
#For each line
for disk in file:
    fields = disk.split("\t")
    #To check the total fields...
    if(len(fields)>1):

        print fields[1]
0

Kết hợp các biểu thức thường xuyên

Đối với các tìm kiếm phức tạp, sử dụng các biểu thức thường xuyên.

Mô -đun biểu thức chính quy Python được gọi là Re. Để sử dụng nó trong chương trình của bạn, hãy nhập mô -đun trước khi bạn sử dụng nó:re. To use it in your program, import the module before you use it:

#Open file in lines
file = open('path/to/txt','r').readlines()
#For each line
for disk in file:
    fields = disk.split("\t")
    #To check the total fields...
    if(len(fields)>1):

        print fields[1]
1

Mô -đun RE thực hiện các biểu thức chính quy bằng cách biên dịch mẫu tìm kiếm thành một đối tượng mẫu. Các phương thức của đối tượng này sau đó có thể được sử dụng để thực hiện các hoạt động khớp.re module implements regular expressions by compiling a search pattern into a pattern object. Methods of this object can then be used to perform match operations.

Ví dụ: giả sử bạn muốn tìm kiếm bất kỳ từ nào trong tài liệu của bạn bắt đầu bằng chữ D và kết thúc trong chữ r. Chúng ta có thể thực hiện điều này bằng cách sử dụng biểu thức chính quy "\ bd \ w*r \ b". Điều đó có nghĩa là gì?d and ends in the letter r. We can accomplish this using the regular expression "\bd\w*r\b". What does this mean?

Trình tự ký tựÝ nghĩa
\ b Một ranh giới từ khớp với một chuỗi trống (bất cứ điều gì, bao gồm không có gì cả), nhưng chỉ khi nó xuất hiện trước hoặc sau một ký tự không từ. "Các ký tự từ" là các chữ số từ 0 đến 9, chữ thường và chữ in hoa hoặc dấu gạch dưới ("_")._").
d Chữ thường chữ d.d.
\ w* \ W đại diện cho bất kỳ ký tự từ nào và * là một định lượng định lượng có nghĩa là "0 hoặc nhiều hơn của ký tự trước đó." Vì vậy, \ w* sẽ khớp với số không hoặc nhiều ký tự từ. represents any word character, and * is a quantifier meaning "zero or more of the previous character." So \w* will match zero or more word characters.
r Chữ thường chữ r.r.
\ b Một ranh giới từ khớp với một chuỗi trống (bất cứ điều gì, bao gồm không có gì cả), nhưng chỉ khi nó xuất hiện trước hoặc sau một ký tự không từ. "Các ký tự từ" là các chữ số từ 0 đến 9, chữ thường và chữ in hoa hoặc dấu gạch dưới ("_").

ddestroyer, dour, and doctor, and the abbreviation dr.

Chữ thường chữ d.pattern which we can use to perform searches using that regular expression.

#Open file in lines
file = open('path/to/txt','r').readlines()
#For each line
for disk in file:
    fields = disk.split("\t")
    #To check the total fields...
    if(len(fields)>1):

        print fields[1]
2

\ w*

\ W đại diện cho bất kỳ ký tự từ nào và * là một định lượng định lượng có nghĩa là "0 hoặc nhiều hơn của ký tự trước đó." Vì vậy, \ w* sẽ khớp với số không hoặc nhiều ký tự từ.r before our string in the statement above is important. It tells Python to interpret our string as a raw string, exactly as we've typed it. If we didn't prefix the string with an r, Python would interpret the escape sequences such as \b in other ways. Whenever you need Python to interpret your strings literally, specify it as a raw string by prefixing it with r.

rsearch(), to search a string for the compiled regular expression, looking for a match. If it finds one, it returns a special result called a match object. Otherwise, it returns None, a built-in Python constant that is used like the boolean value "false".

#Open file in lines
file = open('path/to/txt','r').readlines()
#For each line
for disk in file:
    fields = disk.split("\t")
    #To check the total fields...
    if(len(fields)>1):

        print fields[1]
3

Output:

#Open file in lines
file = open('path/to/txt','r').readlines()
#For each line
for disk in file:
    fields = disk.split("\t")
    #To check the total fields...
    if(len(fields)>1):

        print fields[1]
4

Chữ thường chữ r.re.IGNORECASE in the compile step:

#Open file in lines
file = open('path/to/txt','r').readlines()
#For each line
for disk in file:
    fields = disk.split("\t")
    #To check the total fields...
    if(len(fields)>1):

        print fields[1]
5

Output:

#Open file in lines
file = open('path/to/txt','r').readlines()
#For each line
for disk in file:
    fields = disk.split("\t")
    #To check the total fields...
    if(len(fields)>1):

        print fields[1]
4

Ranh giới từ.

Vì vậy, biểu thức chính quy này sẽ khớp với bất kỳ chuỗi nào có thể được mô tả là "một ranh giới từ, sau đó là chữ thường 'd', sau đó không hoặc nhiều ký tự từ, sau đó là chữ thường 'r', sau đó là một ranh giới từ." Chuỗi mô tả theo cách này bao gồm các từ Kẻ hủy diệt, Dour và Bác sĩ, và chữ viết tắt DR.

Để sử dụng biểu thức chính quy này trong các hoạt động tìm kiếm Python, trước tiên chúng tôi biên dịch nó thành một đối tượng mẫu. Chẳng hạn, câu lệnh Python sau đây tạo ra một mẫu đối tượng mẫu được đặt tên mà chúng ta có thể sử dụng để thực hiện các tìm kiếm bằng cách sử dụng biểu thức thông thường đó.

Ghi chúerrors. If not, it is ignored. The lower() string method converts all strings to lowercase for comparison purposes, making the search case-insensitive without altering the original strings.

Chữ R trước chuỗi của chúng tôi trong câu lệnh trên là quan trọng. Nó bảo Python giải thích chuỗi của chúng tôi là một chuỗi thô, chính xác như chúng tôi đã gõ nó. Nếu chúng ta không có tiền tố chuỗi với R, Python sẽ diễn giải các chuỗi thoát như \ B theo những cách khác. Bất cứ khi nào bạn cần Python để giải thích các chuỗi của mình theo nghĩa đen, chỉ định nó là một chuỗi thô bằng cách tiền tố nó với r.find() method is called directly on the result of the lower() method; this is called method chaining. Also, note that in the print() statement, we construct an output string by joining several strings with the + operator.

#Open file in lines
file = open('path/to/txt','r').readlines()
#For each line
for disk in file:
    fields = disk.split("\t")
    #To check the total fields...
    if(len(fields)>1):

        print fields[1]
7

Bây giờ chúng ta có thể sử dụng các phương thức của đối tượng mẫu, chẳng hạn như search (), để tìm kiếm một chuỗi cho biểu thức chính quy được biên dịch, tìm kiếm một trận đấu. Nếu nó tìm thấy một, nó trả về một kết quả đặc biệt được gọi là đối tượng khớp. Mặt khác, nó không trả về không, một hằng số python tích hợp được sử dụng như giá trị boolean "sai".

#Open file in lines
file = open('path/to/txt','r').readlines()
#For each line
for disk in file:
    fields = disk.split("\t")
    #To check the total fields...
    if(len(fields)>1):

        print fields[1]
8

Output:

#Open file in lines
file = open('path/to/txt','r').readlines()
#For each line
for disk in file:
    fields = disk.split("\t")
    #To check the total fields...
    if(len(fields)>1):

        print fields[1]
9

Để thực hiện tìm kiếm không nhạy cảm trường hợp, bạn có thể chỉ định hằng số đặc biệt re.ignorecase trong bước biên dịch:

Chương trình dưới đây tương tự như chương trình trên, nhưng sử dụng mô -đun biểu thức thường xuyên. Các lỗi và số dòng được lưu trữ dưới dạng Tuples, ví dụ: (vải lanh, dòng). Bộ tuple được tạo bởi dấu ngoặc đơn bổ sung trong câu lệnh Lỗi.APPEND (). Các yếu tố của tuple được tham chiếu tương tự như một danh sách, với một chỉ mục dựa trên không trong ngoặc. Như được xây dựng ở đây, ERR [0] là một tấm vải lanh và ERR [1] là dòng liên kết chứa lỗi.re regular expressions module. The errors and line numbers are stored as tuples, e.g., (linenum, line). The tuple is created by the additional enclosing parentheses in the errors.append() statement. The elements of the tuple are referenced similar to a list, with a zero-based index in brackets. As constructed here, err[0] is a linenum and err[1] is the associated line containing an error.

def find_value(caption_header, fs_header, caption_value, fp):
    fs = None
    with open(fp) as fid:
        headers = fid.readline().strip().split()
        for i, h in enumerate(headers):
            if h == caption_header:
                caption_position = i
            if h == fs_header:
                fs_position = i
        line = fid.readline()
        while line != '':
            values = line.strip().split()
            if values[caption_position] == caption_value:
                fs = values[fs_position]
                break
    return fs
0

Output:

def find_value(caption_header, fs_header, caption_value, fp):
    fs = None
    with open(fp) as fid:
        headers = fid.readline().strip().split()
        for i, h in enumerate(headers):
            if h == caption_header:
                caption_position = i
            if h == fs_header:
                fs_position = i
        line = fid.readline()
        while line != '':
            values = line.strip().split()
            if values[caption_position] == caption_value:
                fs = values[fs_position]
                break
    return fs
1

Trích xuất tất cả các dòng chứa số điện thoại

Chương trình dưới đây in bất kỳ dòng nào của tệp văn bản, Info.txt, chứa số điện thoại Hoa Kỳ hoặc quốc tế. Nó hoàn thành điều này với biểu thức chính quy "(\+\ d {1,2})? [\ S .-]? \ D {3} [\ s .-]? \ D {4}". Regex này phù hợp với các ký hiệu số điện thoại sau:info.txt, which contains a US or international phone number. It accomplishes this with the regular expression "(\+\d{1,2})?[\s.-]?\d{3}[\s.-]?\d{4}". This regex matches the following phone number notations:

  • 123-456-7890
  • (123) 456-7890
  • 123 456 7890
  • 123.456.7890
  • +91 (123) 456-7890
def find_value(caption_header, fs_header, caption_value, fp):
    fs = None
    with open(fp) as fid:
        headers = fid.readline().strip().split()
        for i, h in enumerate(headers):
            if h == caption_header:
                caption_position = i
            if h == fs_header:
                fs_position = i
        line = fid.readline()
        while line != '':
            values = line.strip().split()
            if values[caption_position] == caption_value:
                fs = values[fs_position]
                break
    return fs
2

Output:

def find_value(caption_header, fs_header, caption_value, fp):
    fs = None
    with open(fp) as fid:
        headers = fid.readline().strip().split()
        for i, h in enumerate(headers):
            if h == caption_header:
                caption_position = i
            if h == fs_header:
                fs_position = i
        line = fid.readline()
        while line != '':
            values = line.strip().split()
            if values[caption_position] == caption_value:
                fs = values[fs_position]
                break
    return fs
3

Tìm kiếm một từ điển cho các từ

Chương trình dưới đây tìm kiếm từ điển cho bất kỳ từ nào bắt đầu bằng H và kết thúc bằng PE. Đối với đầu vào, nó sử dụng một tệp từ điển có trên nhiều hệ thống Unix,/usr/share/dict/words.h and end in pe. For input, it uses a dictionary file included on many Unix systems, /usr/share/dict/words.

def find_value(caption_header, fs_header, caption_value, fp):
    fs = None
    with open(fp) as fid:
        headers = fid.readline().strip().split()
        for i, h in enumerate(headers):
            if h == caption_header:
                caption_position = i
            if h == fs_header:
                fs_position = i
        line = fid.readline()
        while line != '':
            values = line.strip().split()
            if values[caption_position] == caption_value:
                fs = values[fs_position]
                break
    return fs
4

Output:

def find_value(caption_header, fs_header, caption_value, fp):
    fs = None
    with open(fp) as fid:
        headers = fid.readline().strip().split()
        for i, h in enumerate(headers):
            if h == caption_header:
                caption_position = i
            if h == fs_header:
                fs_position = i
        line = fid.readline()
        while line != '':
            values = line.strip().split()
            if values[caption_position] == caption_value:
                fs = values[fs_position]
                break
    return fs
5