Tạo tệp động trong Python

chap,

Tôi đang cố mở một tệp bằng cách sử dụng open[] nhưng tên của tệp được tạo
động dưới dạng một biến nhưng cũng có một phần của đường dẫn tĩnh. Chẳng hạn,
tệp có thể được gọi là 'dave' và sẽ luôn ở trong '/my/files/here/'.

Bây giờ tôi đã thử một vài cách kết hợp để làm việc này, chẳng hạn như

Đường dẫn = '/my/files/here/%s' % [tên]

Mở[Đường dẫn, 'r']

Nhưng điều đó có hiệu quả, bất kỳ ai cũng có thể khai sáng cho tôi cách tốt nhất để thực hiện việc này?

Cảm ơn,

cướp

-------------- phần tiếp theo --------------
Một tệp đính kèm HTML đã bị xóa.
URL.

Khi chúng tôi viết một ứng dụng bằng Python, chúng tôi có thể muốn nó có thể chạy trong các môi trường khác nhau. Hoặc, chúng tôi muốn nó có các hành vi khác nhau trong thời gian chạy. Đó là, tham số hóa ứng dụng này thay vì mã hóa cứng mọi thứ, bởi vì chúng tôi không muốn thay đổi mã để thích ứng với các tình huống

Điều này có thể được thực hiện theo nhiều cách. Một trong những cách tiếp cận phổ biến là thêm đối số vào chương trình. Đây là một trong những bài viết trước đây của tôi giới thiệu chi tiết về phương pháp này

Typer — Có lẽ là thư viện giao diện dòng lệnh Python đơn giản nhất để sử dụng

Nó đứng trên vai người khổng lồ — Click

hướng tới khoa học dữ liệu. com

Tuy nhiên, những hạn chế của việc sử dụng lập luận cũng rất rõ ràng.

  • Không thực tế khi thêm một số lượng lớn đối số khi chúng ta chạy chương trình
  • Đối số khởi tạo không thể thay đổi trong thời gian chạy. Ta phải chạy lại chương trình để thay đổi các thông số
  • Nó không thân thiện với người dùng để giữ lại các giá trị hoặc đối số. Vì vậy, không dễ để chia sẻ với người khác

Khi chúng tôi đáp ứng ít nhất một trong các ràng buộc trên, bạn nên cân nhắc sử dụng tệp cấu hình. Vì vậy, tất cả các tham số có thể được thể hiện thành một tệp văn bản

Trong bài viết này, tôi sẽ giới thiệu một trong những mô-đun tích hợp sẵn của Python có tên là

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5. Nó sẽ cho phép chúng tôi đọc và ghi vào các tệp cấu hình bên ngoài hộp

1. Ghi vào tệp cấu hình

Hình ảnh được cung cấp bởi Jarkko Mänty từ Pixabay

Sẽ hợp lý hơn nếu bắt đầu bằng cách đọc tệp cấu hình. Tuy nhiên, nếu bạn đã quen với phong cách viết của tôi, bạn sẽ biết rằng tôi luôn cố gắng viết những bài có thể theo thứ tự. Vì vậy, trước tiên chúng ta có thể bắt đầu với thử nghiệm này để ghi cấu hình vào một tệp

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5 được tích hợp sẵn trong Python 3 nên chúng ta chỉ cần nhập nó vào và bắt đầu sử dụng. Không có gì cần phải tải xuống và cài đặt

import configparserconfig = configparser.ConfigParser[]

Ở đây, chúng tôi khởi tạo một đối tượng có tên là

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
7 bằng cách sử dụng lớp
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
8 từ mô-đun. Vì vậy, chúng tôi đã có một đối tượng cấu hình

1. 1 Xây dựng đối tượng cấu hình

Không có quá nhiều sự khác biệt khi chúng ta sử dụng đối tượng

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
7 so với từ điển. Khi chúng ta muốn thêm một số mục cấu hình vào đối tượng, chúng ta có thể thêm chúng như thế này

config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}

Khóa “cấp cao nhất”

config['RUN_PARAMETERS'] = {}
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
0 sẽ được coi là một phần của tệp cấu hình. Đối với phần
config['RUN_PARAMETERS'] = {}
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
0, chúng tôi đã xác định một từ điển có hai mục. Sau đó, chúng ta có thể thử ghi đối tượng cấu hình này vào một tệp văn bản như sau

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]

Đây là tập tin mà chúng tôi vừa viết

Đó là nó. Tất nhiên, chúng tôi không phải cung cấp toàn bộ từ điển trong một lần. Lên dần dần phần config như sau là hoàn toàn ổn

config['RUN_PARAMETERS'] = {}
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]

Sau đó, tệp sẽ được nối với phần mới

1. 2 Giá trị cấu hình phải là chuỗi

Tuy nhiên, so với một từ điển thực tế, một số ràng buộc được thêm vào một đối tượng cấu hình nhằm mục đích. Ví dụ, điều đáng nói là tất cả các giá trị cấu hình phải là chuỗi. Nếu chúng tôi cố gắng đưa ra một giá trị không phải chuỗi như sau, nó sẽ phàn nàn

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
1

Điều này có ý nghĩa vì tất cả các giá trị cấu hình sẽ được ghi vào một tệp văn bản sau đó. Buộc sử dụng các giá trị chuỗi sẽ giảm khả năng mắc lỗi và giữ tính nhất quán

2. Đọc từ tệp cấu hình

Hình ảnh được cung cấp bởi MustangJoe từ Pixabay

Bây giờ chúng ta có thể đi vào chủ đề chính của ngày hôm nay. Đó là đọc từ một tập tin cấu hình. Xin lưu ý rằng phần mở rộng của tệp văn bản không quan trọng và thậm chí định dạng của các cặp khóa-giá trị là nội dung sẽ được giới thiệu chi tiết trong phần này

2. 1 Đọc đối số cho một đối tượng cấu hình

Trước khi muốn đọc từ file cấu hình, chúng ta cũng cần một đối tượng

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
7

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
3

Hàm

config['RUN_PARAMETERS'] = {}
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
3 sẽ trả về tên tệp cấu hình trong danh sách. Điều này là do
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5 có thể đọc nhiều tệp cấu hình vào một đối tượng. Khi chúng tôi đã đọc các mục, chúng tôi cũng có thể kiểm tra tất cả các phần bằng hàm
config['RUN_PARAMETERS'] = {}
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
7

Nếu bạn không bỏ qua phần trước, bạn có thể dễ dàng nhận được các đối số mà chúng tôi đã ghi vào tệp cấu hình

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
8

2. 2 Đọc đối số với kiểu dữ liệu

Thông thường sẽ có một số đối số không phải chuỗi trong tệp cấu hình, chẳng hạn như số nguyên, float hoặc boolean. Không có gì ngăn cản bạn đọc chúng thành các chuỗi, sau đó chuyển đổi chúng thành các kiểu dữ liệu mà chúng nên có. Một cái gì đó như sau

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
9

Tuy nhiên,

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5 cho phép chúng tôi đọc các giá trị thành các loại dữ liệu nhất định mà không cần các bước chuyển đổi bổ sung. Ví dụ: phương thức
config['RUN_PARAMETERS'] = {}
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
7 sẽ đọc các giá trị dưới dạng số nguyên, trong khi phương thức
config['RUN_PARAMETERS'] = {}
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
8 sẽ đọc chúng thành kiểu bool

import configparserconfig = configparser.ConfigParser[]
3

2. 3 giá trị dự phòng

Đôi khi, bản thân tệp cấu hình cũng có thể là động. Một trong những tính năng mong muốn là chúng tôi có thể muốn người dùng chỉ cần thêm các đối số cần thiết chứ không phải mọi thứ. Tuy nhiên, đối với những tham số không tồn tại, nó sẽ tăng

config['RUN_PARAMETERS'] = {}
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
9

config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
0

Cách giải khá giống với từ điển thông thường. Chúng ta có thể sử dụng hàm

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
10 để lấy giá trị của khóa và cung cấp giá trị dự phòng khi không nhận được giá trị nào

config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
1

Trong ví dụ trên, khi chúng tôi cố lấy

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
11, nó tồn tại để chúng tôi lấy lại giá trị, trong khi khóa
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
12 không tồn tại, vì vậy chuỗi trống sẽ được sử dụng làm giá trị dự phòng

2. 4 Thu nhận giá trị đa cấp

Chúng ta cũng có thể sử dụng phương thức

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
10 để lấy giá trị của khóa trực tiếp từ đối tượng cấu hình, điều đó có nghĩa là chúng ta cũng có thể đặt tên phần trong phương thức

config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
2

Khi chúng tôi đang sử dụng phương pháp

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
10 như trên, chúng tôi cũng có thể xác định rõ ràng giá trị dự phòng như sau

config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
3

Điều đáng nói là tính năng đa cấp cũng hoạt động với phương thức “lấy kiểu dữ liệu”.

config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
4

2. 5 Kiểm tra sự tồn tại của khóa

Cuối cùng, giống như từ điển Python, chúng ta cũng có thể kiểm tra xem một khóa có tồn tại trong một phần hay không như sau

config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
5

3. Phần mặc định

Hình ảnh được cung cấp bởi Michael Schwarzenberger từ Pixabay

Có một phần ma thuật trong phần

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5, đó là phần
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
16. Khi tệp cấu hình có phần mặc định, giá trị sẽ có thể truy cập được từ bất kỳ phần nào

Hãy xây dựng một ví dụ bằng cách viết phần

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
16 vào tệp cấu hình

config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
6

Sau đó, nếu chúng tôi cố gắng liệt kê tất cả các phần trong đối tượng cấu hình, chúng tôi sẽ thấy rằng phần mặc định sẽ không có ở đó

Tuy nhiên, có thể chứng minh rằng nó chắc chắn có

config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
7

Đây là tính năng của phần mặc định

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5 và như tôi đã nói trước đây, các mục trong phần mặc định có thể được truy cập từ bất kỳ phần nào khác. Nếu chúng tôi cố gắng liệt kê tất cả các cặp khóa-giá trị trong hai phần còn lại, chúng tôi sẽ thấy chúng tồn tại trong cả hai phần

config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
8

4. Định dạng cặp khóa-giá trị được hỗ trợ

Hình ảnh được cung cấp bởi Michael Schwarzenberger từ Pixabay

Việc sử dụng dấu bằng

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
19 cho các thuộc tính khóa-giá trị khá phổ biến đối với các tệp cấu hình. Tuy nhiên, thực sự có các định dạng khác được sử dụng trong các tiêu chuẩn khác nhau. Cái hay của mô-đun
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5 là chúng ta có thể thấy rằng nó hỗ trợ hầu hết các kiểu phổ biến

Hãy xác định một tệp cấu hình khác như sau. Sau đó, đặt tên cho nó là

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
31

config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
9

Trong tệp cấu hình ví dụ này, nhiều kiểu khác nhau được trộn lẫn. Nếu chúng tôi cố gắng đọc tệp, tất cả các tình huống có thể được xử lý rất tốt

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
0

Cả dấu bằng và dấu hai chấm đều hoạt động tốt

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
1

Khi có sự ngắt dòng trong giá trị, nó có thể được ghi lại một cách chính xác

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
2

Khi có bình luận, chúng sẽ bị bỏ qua. Vì vậy, đối với phần [Nhận xét], không có cặp khóa-giá trị nào tồn tại

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
3

Nếu một phần bị thụt vào hoặc có khoảng trống không mong muốn ở phía trước tiêu đề phần hoặc các phím thì sẽ không có vấn đề gì

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
4

Bản tóm tắt

Hình ảnh được cung cấp bởi Noel Bauza từ Pixabay

Trong bài viết này, tôi đã giới thiệu một thư viện tích hợp sẵn của Python có tên là

with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5. Nó cho phép chúng ta đọc và ghi các tham số động từ một tệp văn bản. Nó cũng cung cấp nhiều tính năng vượt trội như giá trị đọc vào các loại dữ liệu nhất định và giá trị dự phòng. Nó cũng hỗ trợ nhiều định dạng cặp khóa-giá trị hoạt động tốt với nhận xét, khóa trống và thụt lề không cần thiết

Tham gia Medium với liên kết giới thiệu của tôi - Christopher Tao

Là thành viên Phương tiện, một phần phí thành viên của bạn sẽ được chuyển đến các tác giả mà bạn đã đọc và bạn có toàn quyền truy cập vào mọi câu chuyện…

vừa phải. com

Nếu bạn cảm thấy bài viết của tôi hữu ích, hãy cân nhắc tham gia Medium Membership để ủng hộ tôi và hàng ngàn người viết khác. [Nhấp vào liên kết ở trên]

Làm cách nào để tạo một tệp bằng Python?

Tạo tệp Python .
Trong cửa sổ công cụ Dự án, chọn gốc dự án [thông thường, đó là nút gốc trong cây dự án], nhấp chuột phải vào dự án và chọn Tệp. Mới
Chọn tùy chọn Tệp Python từ menu ngữ cảnh, sau đó nhập tên tệp mới. PyCharm tạo một tệp Python mới và mở nó để chỉnh sửa

Làm cách nào để đọc dữ liệu động trong Python?

Hàm nào dùng để đọc dữ liệu động từ người dùng trong Python? . use the built-in Python eval[] to dynamically evaluate expressions from a string-based or compiled-code-based input.

Làm cách nào chúng tôi có thể lấy kích thước của tệp có tên xyz txt bằng mô-đun os?

Mô-đun python os có hàm stat[] nơi chúng ta có thể chuyển tên tệp làm đối số. Hàm này trả về cấu trúc tuple chứa thông tin tệp. Sau đó, chúng ta có thể lấy thuộc tính st_size của nó để lấy kích thước tệp theo byte

Chủ Đề