Hướng dẫn python read multiple files line by line - python đọc nhiều tệp theo từng dòng

Tôi có một danh sách các tệp ['file_a.txt', 'file_b.txt', 'file_c.txt' ....]

Tôi muốn đọc một dòng từ mỗi tệp và tạo một dòng mới bằng cách thêm chúng lại với nhau.

Đầu ra sẽ trông giống như:

file_a_line_1 file_b_line_1 file_c_line_1.... 
file_a_line_2 file_b_line_2 file_c_line_2.... 

zip có thể được sử dụng để làm điều này?

Patrick Yu

9521 Huy hiệu vàng7 Huy hiệu bạc19 Huy hiệu đồng1 gold badge7 silver badges19 bronze badges

Đã hỏi ngày 22 tháng 1 năm 2016 lúc 0:28Jan 22, 2016 at 0:28

5

from itertools import zip_longest

files = [open[filename] for filename in file_list]

for lines in zip_longest[*files, fillvalue='']:
    print[" ".join[lines]]

Điều này cũng sẽ hoạt động khi các tệp không có cùng độ dài. Tôi sẽ sử dụng izip_longest, nếu bạn đang ở trên Python 2, thay vào đó.

Điều này sẽ để lại một số không gian giữa các giá trị nếu một số tệp đã cạn kiệt, vì vậy bạn có thể muốn làm những thứ phức tạp hơn so với tham gia, nhưng đó là phần dễ dàng hơn.

Đã trả lời ngày 22 tháng 1 năm 2016 lúc 0:37Jan 22, 2016 at 0:37

L3viathanL3viathanL3viathan

26.1k2 Huy hiệu vàng57 Huy hiệu bạc76 Huy hiệu đồng2 gold badges57 silver badges76 bronze badges

2

Một cái gì đó như thế này có thể hoạt động. Bạn sẽ mở tất cả các tệp, sau đó đọc một dòng tại một thời điểm từ mỗi dòng. Không rõ bạn muốn làm gì khi một tệp không còn dòng [dừng hoàn toàn], hãy tiếp tục cho đến khi tất cả các dòng không còn dòng?

file_list = ['file1', 'file2', 'file3']

fps = []
for fn in file_list:
    fps.append[open[fn, 'w']]
curLine = 'start'

while curLine:
    curLine = ''
    for fp in fps:
        myLine = fp.readline[]
        if myLine:
            curLine += myLine + ' '
        else:
            break #can do what you want when you run out

for fp in fps:
    fp.close[]

Hãy nhớ đóng các trình xử lý tập tin của bạn.

Đã trả lời ngày 22 tháng 1 năm 2016 lúc 0:42Jan 22, 2016 at 0:42

Garrett Rgarrett rGarrett R

2.65710 huy hiệu bạc15 huy hiệu đồng10 silver badges15 bronze badges

Nhiệm vụ của chúng tôi cho ngày hôm nay sẽ là đọc nội dung của tệp văn bản hoặc tệp CSV vào danh sách. Mỗi mục danh sách phải chứa một dòng văn bản.

Đọc nội dung tệp văn bản vào danh sách

Trước tiên, chúng tôi sẽ xác định đường dẫn hệ thống tệp đến tệp mà chúng tôi muốn đọc, sau đó mở nó ở chế độ đọc [‘R,]. Tiếp theo sử dụng phương thức Readlines của TextIowRapper để đọc nội dung tệp văn bản vào đối tượng Danh sách.read mode [‘r’]. Next use the readlines method of the TextIOWrapper to read the text file contents into the list object.

Ở đây, một đoạn trích hoàn thành chính xác điều đó:

from pathlib import Path

# define the path to the text file we would like to read
dir_path = Path['C:\WorkDir']
file_name = 'file_to_read.txt'
file_path = dir_path.joinpath[file_name]

# check if the file exists. Read it line by line if it does
if file_path.is_file[]:
    with open [file_path, 'r'] as f:
        text_list = f.readlines[]
    print [text_list]
else:
    print["Your input file doesn't exit"]

Đúng như dự đoán, kết quả là một danh sách:

['This is a sample text file that i have just created.\n', 'This is the second line.\n', 'And this is the third.']

Loại bỏ các dòng mới

Nếu tôi muốn loại bỏ các dòng mới [\ n] trong các yếu tố danh sách khác nhau, tôi có thể dễ dàng tạo một danh sách mới bằng cách sử dụng sự hiểu biết:

no_newlines_list = [element.strip[] for element in text_list]
print[no_newlines_list]

Đọc nhiều tệp văn bản vào danh sách danh sách

Nhiệm vụ tiếp theo của chúng tôi là đọc nhiều hơn một tập tin.Như chúng ta đã thấy trước đây, phương thức Readlines [] của TextiowRapper của chúng ta đọc từng dòng thành một danh sách mới.Vì chúng tôi sẽ truy cập nhiều tệp, chúng tôi sẽ nối nội dung của mỗi tệp vào danh sách danh sách.

Ở đây, một đoạn trích đơn giản mà bạn có thể sử dụng:

import glob

#define work directory
path_dir = 'C:\WorkDir\WorkFolderTxt'

#define list of files to access in a specific directory
txt_file_list  =  glob.glob[path_dir+'\\*.txt']

# define list to hold all lines
mult_text_list = []

# read through all files and append content to the list of lists
for file in txt_file_list:
    with open [file, 'r'] as f:
        s_text_list = f.readlines[]
        mult_text_list.append[s_text_list]
print [mult_text_list]

Học thêm

Làm thế nào bạn có thể thoát khỏi các ký tự mới trong chuỗi Python?

Bài Viết Liên Quan

Chủ Đề