Tôi đang viết một số mã tăng số ở cuối tên tệp cho đến khi nó không còn ghi đè tệp hiện có nữa. Tôi đang tạo một số tệp, tất cả đều có cùng tên tệp cơ sở nhưng các phần mở rộng khác nhau, không có phần nào tôi muốn ghi đè lên.Tự động xây dựng biểu thức Boolean
phiên bản Naive:
prefix = 'hello0'
while os.path.exists(prefix + '.abc') or os.path.exists(prefix + '.def') or os.path.exists(prefix + '.ghi'):
n = int(prefix[-1])
prefix = prefix[:-1] + str(n + 1) # I know this doesn't work when n reaches two digits; my full code involves a regular expression
Điều kiện rõ ràng là có thể nhận được rất dài và xấu xí khi có nhiều hơn một vài phần mở rộng. Tôi tóm tắt điều này thành một vòng lặp for
.
phiên bản của tôi:
prefix = 'hello0'
extensions = ('.abc', '.def', '.ghi') # there could be even more than this
condition = True
while condition:
condition = False
# if any of the paths still exist, set the condition back to True
for extension in extensions:
if os.path.exists(prefix + extension):
condition = True
n = int(prefix[-1])
prefix = prefix[:-1] + str(n + 1)
tôi vẫn cảm thấy đây là một chút vụng về: nó không phải là hoàn toàn rõ ràng những gì while
vòng lặp được thực sự thử nghiệm. Có thể tạo biểu thức Boolean động không, thay vì đặt giá trị Boolean ?
Tôi nghĩ rằng sau đây có thể làm việc (tôi đã không kiểm tra nó, tôi chỉ nghĩ về nó khi viết này!) Nhưng tôi không nghĩ rằng tôi cần phải nghỉ mát để eval
:
prefix = 'hello0'
extensions = ('.abc', '.def', '.ghi')
test = 'False'
for extension in extensions:
test += " or os.path.exists(prefix + '" + extension + "')"
while eval(test):
n = int(prefix[-1])
prefix = prefix[:-1] + str(n + 1)
Nó cũng thực hiện đánh giá ngắn mạch, giống như một chuỗi các biểu thức 'hoặc'. Cũng có một phương thức 'all()' tương ứng. –
"... có một tính năng ngôn ngữ quan trọng mà tôi cần phải tìm hiểu." Không thể nhấn mạnh điều này đủ. Nếu bạn có một vấn đề, giải pháp là ở đó * một nơi nào đó *. –
'any' là hoàn hảo, cảm ơn bạn. Và tôi hoàn toàn đồng ý về 'eval' là một dấu hiệu cho thấy bạn đã bỏ lỡ điều gì đó về ngôn ngữ! –