Python đọc các cột tệp vào mảng

Có rất nhiều cách để đọc từ tệp và ghi vào tệp dữ liệu trong numpy. Chúng ta sẽ thảo luận về các cách khác nhau và các chức năng tương ứng trong chương này

  • savetxt
  • tảitxt
  • nộp
  • từ tập tin
  • tiết kiệm
  • trọng tải
  • genfromtxt

Lưu tệp văn bản với savetxt

Hai chức năng đầu tiên chúng tôi sẽ giới thiệu là savetxt và loadtxt

Trong ví dụ đơn giản sau, chúng ta xác định một mảng x và lưu nó dưới dạng tệp văn bản với savetxt

import numpy as np

x = np.array([[1, 2, 3], 
              [4, 5, 6],
              [7, 8, 9]], np.int32)

np.savetxt("../data/test.txt", x)

Tập tin "kiểm tra. txt" là một tệp văn bản và nội dung của nó trông như thế này

[email protected]:~/Dropbox/notebooks/numpy$ more test.txt
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00

Chú ý. Đầu ra ở trên đã được tạo trên dấu nhắc lệnh của Linux

Cũng có thể in mảng ở định dạng đặc biệt, ví dụ như với ba chữ số thập phân hoặc dưới dạng số nguyên, được đặt trước các khoảng trống ở đầu, nếu số chữ số nhỏ hơn 4 chữ số. Với mục đích này, chúng tôi gán một chuỗi định dạng cho tham số thứ ba 'fmt'. Chúng ta đã thấy trong ví dụ đầu tiên của mình rằng dấu phân cách mặc định là khoảng trống. Chúng ta có thể thay đổi hành vi này bằng cách gán một chuỗi cho tham số "dấu phân cách". Trong hầu hết các trường hợp, chuỗi này sẽ chỉ bao gồm một ký tự duy nhất nhưng nó có thể là một chuỗi ký tự, chẳng hạn như một biểu tượng mặt cười ". -) " cũng

np.savetxt("../data/test2.txt", x, fmt="%2.3f", delimiter=",")
np.savetxt("../data/test3.txt", x, fmt="%04d", delimiter=" :-) ")

Các tập tin mới được tạo trông như thế này

[email protected]:~/Dropbox/notebooks/numpy$ more test2.txt 
1.000,2.000,3.000
4.000,5.000,6.000
7.000,8.000,9.000
[email protected]:~/Dropbox/notebooks/numpy$ more test3.txt 
0001 :-) 0002 :-) 0003
0004 :-) 0005 :-) 0006
0007 :-) 0008 :-) 0009

Cú pháp hoàn chỉnh của savetxt trông như thế này

savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ')
ParameterMeaningXarray_like Dữ liệu sẽ được lưu vào tệp văn bản. fmtstr hoặc chuỗi str, tùy chọn
Một định dạng duy nhất (%10. 5f), một chuỗi các định dạng hoặc một chuỗi đa định dạng, e. g. 'Lặp lại %d -- %10. 5f', trong trường hợp đó 'dấu phân cách' bị bỏ qua. Đối với 'X' phức tạp, các tùy chọn pháp lý cho 'fmt' là.
a) một mã xác định duy nhất, "fmt='%. 4e'", dẫn đến các số được định dạng như "' (%s+%sj)' % (fmt, fmt)"
b) một chuỗi đầy đủ chỉ định mọi phần thực và phần ảo, e. g. "'%. 4e %+. 4j %. 4e %+. 4j %. 4e %+. 4j'" cho 3 cột
c) danh sách các từ chỉ định, mỗi cột một cái - trong trường hợp này, phần thực và phần ảo phải có các từ chỉ định riêng biệt, e. g. "['%. 3e + %. 3ej', '(%. 15e%+. 15ej)']" cho 2 cộtdelimiterMột chuỗi dùng để tách các cột. dòng mớiMột chuỗi (e. g. "\n", "\r\n" hoặc ",\n") sẽ kết thúc một dòng thay vì tiêu đề kết thúc dòng mặc địnhMột chuỗi sẽ được viết ở đầu tệp. footerMột chuỗi sẽ được ghi ở cuối tệp. commentsMột chuỗi sẽ được thêm vào trước chuỗi 'header' và 'footer', để đánh dấu chúng là nhận xét. Thẻ băm '#' được sử dụng làm mặc định.

Đào tạo Python trực tiếp

Python đọc các cột tệp vào mảng

Thưởng thức trang này?

Nhìn thấy. Tổng quan về các khóa học Python trực tiếp

đăng ký tại đây

Đang tải tệp văn bản bằng loadtxt

Bây giờ chúng ta sẽ đọc tệp "test. txt", mà chúng tôi đã viết trong chương phụ trước đây của chúng tôi

y = np.loadtxt("../data/test.txt")
print(y)

ĐẦU RA

[[1. 2. 3.]
 [4. 5. 6.]
 [7. 8. 9.]]

y = np.loadtxt("../data/test2.txt", delimiter=",")
print(y)

ĐẦU RA

[[1. 2. 3.]
 [4. 5. 6.]
 [7. 8. 9.]]

Không có gì mới, nếu chúng ta đọc trong văn bản của mình, trong đó chúng ta đã sử dụng một mặt cười để phân cách

y = np.loadtxt("../data/test3.txt", delimiter=" :-) ")
print(y)

ĐẦU RA

[[1. 2. 3.]
 [4. 5. 6.]
 [7. 8. 9.]]

Cũng có thể chọn các cột theo chỉ mục

[email protected]:~/Dropbox/notebooks/numpy$ more test.txt
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00
1

ĐẦU RA

[email protected]:~/Dropbox/notebooks/numpy$ more test.txt
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00
2

Chúng ta sẽ đọc trong ví dụ tiếp theo về tệp "times_and_Temperatures. txt", mà chúng tôi đã tạo trong chương về Trình tạo của hướng dẫn Python của chúng tôi. Mỗi dòng chứa một thời gian ở định dạng "hh. mm. ss" và nhiệt độ ngẫu nhiên giữa 10. 0 và 25. 0 độ. Chúng ta phải chuyển đổi chuỗi thời gian thành số float. Thời gian sẽ tính bằng phút với giây tính bằng trăm. Trước tiên, chúng tôi xác định một hàm chuyển đổi "hh. mm. ss" thành phút

[email protected]:~/Dropbox/notebooks/numpy$ more test.txt
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00
3

ĐẦU RA

[email protected]:~/Dropbox/notebooks/numpy$ more test.txt
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00
4

Bạn có thể nhận thấy rằng chúng tôi kiểm tra loại thời gian cho nhị phân. Lý do cho điều này là việc sử dụng chức năng của chúng tôi "time2float_minutes trong loadtxt trong ví dụ sau. Các bộ chuyển đổi tham số từ khóa chứa một từ điển có thể giữ chức năng cho một cột (khóa của cột tương ứng với khóa của từ điển) để chuyển đổi dữ liệu chuỗi của cột này thành dấu phẩy. Dữ liệu chuỗi là một chuỗi byte. Đó là lý do tại sao chúng tôi phải chuyển nó thành một chuỗi unicode trong chức năng của chúng tôi

[email protected]:~/Dropbox/notebooks/numpy$ more test.txt
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00
5

ĐẦU RA

[email protected]:~/Dropbox/notebooks/numpy$ more test.txt
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00
6

nộp

tofile là một hàm để ghi nội dung của một mảng vào một tệp ở cả định dạng nhị phân, là định dạng mặc định và văn bản

np.savetxt("../data/test2.txt", x, fmt="%2.3f", delimiter=",")
np.savetxt("../data/test3.txt", x, fmt="%04d", delimiter=" :-) ")
9

Dữ liệu của A darrry luôn được viết theo thứ tự 'C', bất kể thứ tự của A

Tệp dữ liệu được ghi bằng phương pháp này có thể được tải lại bằng chức năng

[email protected]:~/Dropbox/notebooks/numpy$ more test2.txt 
1.000,2.000,3.000
4.000,5.000,6.000
7.000,8.000,9.000
[email protected]:~/Dropbox/notebooks/numpy$ more test3.txt 
0001 :-) 0002 :-) 0003
0004 :-) 0005 :-) 0006
0007 :-) 0008 :-) 0009
0

Tham sốMeaningfidcó thể là một đối tượng tệp đang mở hoặc một chuỗi chứa tên tệp. sepChuỗi 'sep' xác định dấu phân cách giữa các mục mảng cho đầu ra văn bản. Nếu nó trống (''), tệp nhị phân được ghi, tương đương với tệp. viết (một. dây ()). định dạng Chuỗi định dạng cho đầu ra tệp văn bản. Mỗi mục trong mảng được định dạng thành văn bản trước tiên bằng cách chuyển đổi nó thành loại Python gần nhất, sau đó sử dụng mục 'format' %

Nhận xét

Thông tin về tuổi thọ và độ chính xác bị mất. Do đó, có thể không nên sử dụng chức năng này để lưu trữ dữ liệu hoặc truyền dữ liệu giữa các máy có tuổi thọ khác nhau. Một số vấn đề này có thể được khắc phục bằng cách xuất dữ liệu dưới dạng tệp văn bản, với chi phí là tốc độ và kích thước tệp

[email protected]:~/Dropbox/notebooks/numpy$ more test.txt
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00
7

ĐẦU RA

[email protected]:~/Dropbox/notebooks/numpy$ more test.txt
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00
8

Đào tạo Python trực tiếp

Python đọc các cột tệp vào mảng

Thưởng thức trang này?

Nhìn thấy. Tổng quan về các khóa học Python trực tiếp

Các khóa học trực tuyến sắp tới

Python dành cho kỹ sư và nhà khoa học

Phân tích dữ liệu với Python

đăng ký tại đây

từ tập tin

[email protected]:~/Dropbox/notebooks/numpy$ more test2.txt 
1.000,2.000,3.000
4.000,5.000,6.000
7.000,8.000,9.000
[email protected]:~/Dropbox/notebooks/numpy$ more test3.txt 
0001 :-) 0002 :-) 0003
0004 :-) 0005 :-) 0006
0007 :-) 0008 :-) 0009
1 để đọc dữ liệu đã được viết bằng hàm
[email protected]:~/Dropbox/notebooks/numpy$ more test2.txt 
1.000,2.000,3.000
4.000,5.000,6.000
7.000,8.000,9.000
[email protected]:~/Dropbox/notebooks/numpy$ more test3.txt 
0001 :-) 0002 :-) 0003
0004 :-) 0005 :-) 0006
0007 :-) 0008 :-) 0009
2. Có thể đọc dữ liệu nhị phân, nếu biết kiểu dữ liệu. Cũng có thể phân tích các tệp văn bản được định dạng đơn giản. Dữ liệu từ tệp được chuyển thành một mảng

Cú pháp chung trông như thế này

[email protected]:~/Dropbox/notebooks/numpy$ more test2.txt 
1.000,2.000,3.000
4.000,5.000,6.000
7.000,8.000,9.000
[email protected]:~/Dropbox/notebooks/numpy$ more test3.txt 
0001 :-) 0002 :-) 0003
0004 :-) 0005 :-) 0006
0007 :-) 0008 :-) 0009
3

Tham sốMeaningfile'file' có thể là một đối tượng tệp hoặc tên của tệp để đọc. dtypexác định kiểu dữ liệu của mảng sẽ được xây dựng từ tệp dữ liệu. Đối với tệp nhị phân, nó được sử dụng để xác định kích thước và thứ tự byte của các mục trong tệp. Count xác định số lượng mục sẽ được đọc. -1 có nghĩa là tất cả các mục sẽ được đọc. sepChuỗi 'sep' xác định dấu phân cách giữa các mục, nếu tệp là tệp văn bản. Nếu nó trống (''), tệp sẽ được coi là tệp nhị phân. Khoảng trắng ("") trong dấu phân cách khớp với 0 hoặc nhiều ký tự khoảng trắng. Dấu phân cách chỉ bao gồm các khoảng trắng phải khớp với ít nhất một khoảng trắng

[email protected]:~/Dropbox/notebooks/numpy$ more test.txt
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00
9

ĐẦU RA

np.savetxt("../data/test2.txt", x, fmt="%2.3f", delimiter=",")
np.savetxt("../data/test3.txt", x, fmt="%04d", delimiter=" :-) ")
0

np.savetxt("../data/test2.txt", x, fmt="%2.3f", delimiter=",")
np.savetxt("../data/test3.txt", x, fmt="%04d", delimiter=" :-) ")
1

ĐẦU RA

np.savetxt("../data/test2.txt", x, fmt="%2.3f", delimiter=",")
np.savetxt("../data/test3.txt", x, fmt="%04d", delimiter=" :-) ")
2

Chú ý

Có thể gây ra sự cố khi sử dụng

[email protected]:~/Dropbox/notebooks/numpy$ more test2.txt 
1.000,2.000,3.000
4.000,5.000,6.000
7.000,8.000,9.000
[email protected]:~/Dropbox/notebooks/numpy$ more test3.txt 
0001 :-) 0002 :-) 0003
0004 :-) 0005 :-) 0006
0007 :-) 0008 :-) 0009
2 và
[email protected]:~/Dropbox/notebooks/numpy$ more test2.txt 
1.000,2.000,3.000
4.000,5.000,6.000
7.000,8.000,9.000
[email protected]:~/Dropbox/notebooks/numpy$ more test3.txt 
0001 :-) 0002 :-) 0003
0004 :-) 0005 :-) 0006
0007 :-) 0008 :-) 0009
1 để lưu trữ dữ liệu vì các tệp nhị phân được tạo không độc lập với nền tảng. Không có thông tin về thứ tự byte hoặc loại dữ liệu nào được lưu bởi
[email protected]:~/Dropbox/notebooks/numpy$ more test2.txt 
1.000,2.000,3.000
4.000,5.000,6.000
7.000,8.000,9.000
[email protected]:~/Dropbox/notebooks/numpy$ more test3.txt 
0001 :-) 0002 :-) 0003
0004 :-) 0005 :-) 0006
0007 :-) 0008 :-) 0009
2. Dữ liệu có thể được lưu trữ trong nền tảng độc lập. định dạng npy bằng cách sử dụng lưu và tải thay thế

Phương pháp hay nhất để tải và lưu dữ liệu

Cách được đề xuất để lưu trữ và tải dữ liệu bằng Numpy trong Python bao gồm sử dụng tải và lưu. Chúng tôi cũng sử dụng một tệp tạm thời sau đây

np.savetxt("../data/test2.txt", x, fmt="%2.3f", delimiter=",")
np.savetxt("../data/test3.txt", x, fmt="%04d", delimiter=" :-) ")
3

ĐẦU RA

np.savetxt("../data/test2.txt", x, fmt="%2.3f", delimiter=",")
np.savetxt("../data/test3.txt", x, fmt="%04d", delimiter=" :-) ")
4

Đào tạo Python trực tiếp

Python đọc các cột tệp vào mảng

Thưởng thức trang này?

Nhìn thấy. Tổng quan về các khóa học Python trực tiếp

đăng ký tại đây

và một cách khác. genfromtxt

Vẫn còn một cách khác để đọc đầu vào dạng bảng từ tệp để tạo mảng. Như tên ngụ ý, tệp đầu vào được coi là tệp văn bản. Tệp văn bản cũng có thể ở dạng tệp lưu trữ. genfromtxt có thể xử lý các định dạng lưu trữ gzip và bzip2. Loại tệp lưu trữ được xác định bởi phần mở rộng của tệp, tôi. e. '. gz' cho gzip và bz2' cho bzip2

genfromtxt chậm hơn loadtxt, nhưng nó có khả năng đối phó với dữ liệu bị thiếu. Nó xử lý dữ liệu tệp trong hai lần. Lúc đầu, nó chuyển đổi các dòng của tệp thành chuỗi. Sau đó, nó chuyển đổi các chuỗi thành kiểu dữ liệu được yêu cầu. mặt khác, loadtxt hoạt động trong một lần, đó là lý do tại sao nó nhanh hơn

Ví dụ với genfromtxt

Nếu dtype được đặt thành Không, như trong ví dụ sau, các dtypes sẽ được xác định bởi nội dung của từng cột, riêng lẻ

np.savetxt("../data/test2.txt", x, fmt="%2.3f", delimiter=",")
np.savetxt("../data/test3.txt", x, fmt="%04d", delimiter=" :-) ")
5

ĐẦU RA

np.savetxt("../data/test2.txt", x, fmt="%2.3f", delimiter=",")
np.savetxt("../data/test3.txt", x, fmt="%04d", delimiter=" :-) ")
6

Lý do tại sao tất cả các cột được chuyển thành chuỗi thay vì số float nằm ở dòng đầu tiên, bởi vì dòng đầu tiên chứa chuỗi chứ không phải số float. Chúng ta có thể bỏ qua dòng đầu tiên bằng cách sử dụng tham số

[email protected]:~/Dropbox/notebooks/numpy$ more test2.txt 
1.000,2.000,3.000
4.000,5.000,6.000
7.000,8.000,9.000
[email protected]:~/Dropbox/notebooks/numpy$ more test3.txt 
0001 :-) 0002 :-) 0003
0004 :-) 0005 :-) 0006
0007 :-) 0008 :-) 0009
7 và lấy số float cho tất cả các cột