Hàm trả về danh sách các từ của một chuỗi đã cho sử dụng dấu phân cách làm chuỗi phân cách
- Nếu maxsplit được đưa ra, danh sách sẽ có tối đa maxsplit+1 phần tử
- Nếu maxsplit không được chỉ định hoặc -1, thì không có giới hạn về số lần phân tách
- Nếu sep được đưa ra, các dấu phân cách liên tiếp không được nhóm lại với nhau và được coi là phân cách các chuỗi trống
- Đối số sep có thể bao gồm nhiều ký tự
- Việc tách một chuỗi rỗng bằng một dấu tách được chỉ định sẽ trả về ['']
Trình bày bằng hình ảnh
Giải pháp mẫu. -
Mã Python
filename = input["Input the Filename: "]
f_extns = filename.split["."]
print ["The extension of the file is : " + repr[f_extns[-1]]]
Đầu ra mẫu
Input the Filename: abc.java The extension of the file is : 'java'
Sơ đồ
Trực quan hóa việc thực thi mã Python
Công cụ sau đây trực quan hóa những gì máy tính đang làm từng bước khi nó thực thi chương trình nói trên
Làm cách nào để thiết lập tên tệp đầu ra để tự động thay đổi phần ngày dựa trên tên tệp Đầu vào. Ví dụ: tệp đầu vào có tên 2021-04-30 GL 331115 State. Tôi muốn tên tệp đầu ra là 2021-04-30 CR TX Gasoline Workpapers
Chỉ có ngày thay đổi, phần còn lại của tên tệp luôn giống nhau. Tôi đã thử tìm kiếm các bài viết khác về điều này, nhưng chúng không hoàn toàn giống nhau
Chúng tôi thực sự không muốn phải chỉnh sửa mã Python của mình mỗi khi chúng tôi muốn xử lý một tệp khác. Sẽ hữu ích hơn nếu yêu cầu người dùng nhập chuỗi tên tệp mỗi khi chương trình chạy để họ có thể sử dụng chương trình của chúng tôi trên các tệp khác nhau mà không thay đổi mã Python
Điều này khá đơn giản để thực hiện bằng cách đọc tên tệp từ người dùng bằng cách sử dụng
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
html_input = f.read[] # creatie van een string door de html file in te lezen in het programma
findall_matches = re.findall["[.*?]
", html_input, flags=re.DOTALL] # selecteert enkel de leestekst
joined_output_string = "\n".join[findall_matches] # plakt alle gevonden tekst samen
text = re.sub['|" +"', "", joined_output_string] # vervangt html info en blanks door een spatie
f2.write[text] # wegschrijven van de txt-file
f2.close[]
parser[]
1 như saufname = input['Enter the file name: '] fhand = open[fname] count = 0 for line in fhand: if line.startswith['Subject:']: count = count + 1 fhand.close[] print['There were', count, 'subject lines in', fname]
Chúng tôi đọc tên tệp từ người dùng và đặt nó vào một biến có tên
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
html_input = f.read[] # creatie van een string door de html file in te lezen in het programma
findall_matches = re.findall["[.*?]
", html_input, flags=re.DOTALL] # selecteert enkel de leestekst
joined_output_string = "\n".join[findall_matches] # plakt alle gevonden tekst samen
text = re.sub['|" +"', "", joined_output_string] # vervangt html info en blanks door een spatie
f2.write[text] # wegschrijven van de txt-file
f2.close[]
parser[]
2 và mở tệp đó. Bây giờ chúng ta có thể chạy chương trình nhiều lần trên các tệp khác nhaupython search6.py # seach6.py is the file containing the above script. Enter the file name: mbox.txt There were 1797 subject lines in mbox.txt python search6.py Enter the file name: mbox-short.txt There were 27 subject lines in mbox-short.txt
Đặt đoạn mã sau để mở và đếm số dòng của tệp từ người dùng. Coi chừng thụt đầu dòng và các khối mã bổ sung
count = 0 fname = input['Enter the file name: '] --- fhand = open[fname] --- for line in fhand: --- for line in fname: #paired --- count = count + 1 --- fhand.close[] print['There were', count, 'lines in', fname]
Trước khi xem qua phần tiếp theo, hãy xem qua chương trình trên và tự hỏi: “Điều gì có thể xảy ra ở đây?”
Có năm lỗi trong đoạn mã dưới đây. Sửa mã để yêu cầu người dùng cung cấp tệp, mở “mbox-short. txt”, và đếm số dòng bắt đầu bằng
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
html_input = f.read[] # creatie van een string door de html file in te lezen in het programma
findall_matches = re.findall["[.*?]
", html_input, flags=re.DOTALL] # selecteert enkel de leestekst
joined_output_string = "\n".join[findall_matches] # plakt alle gevonden tekst samen
text = re.sub['|" +"', "", joined_output_string] # vervangt html info en blanks door een spatie
f2.write[text] # wegschrijven van de txt-file
f2.close[]
parser[]
3 Xin chào, tôi đang cố gắng viết một chương trình nhỏ sẽ liên tiếp mở tất cả các tệp bằng một. html ở một vị trí, hãy thực hiện một số công việc trên chúng và sau đó lưu chúng bằng cùng một tên nhưng với. phần mở rộng txt
Đây là những gì tôi có. Mã không đưa ra bất kỳ lỗi nào nhưng các tệp mới không được tạo và tôi có ấn tượng rằng không có gì xảy ra
Chức năng phân tích cú pháp tự hoạt động [tôi đã thử nó trên một tệp riêng biệt và nó hoạt động tốt]. Đường dẫn dường như cũng đang hoạt động dưới dạng một tệp [tên tệp. txt] được tạo, nhưng nó trống.
Có ai có thể chỉ cho tôi những gì tôi đang thiếu không?
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
html_input = f.read[] # creatie van een string door de html file in te lezen in het programma
findall_matches = re.findall["[.*?]
", html_input, flags=re.DOTALL] # selecteert enkel de leestekst
joined_output_string = "\n".join[findall_matches] # plakt alle gevonden tekst samen
text = re.sub['|" +"', "", joined_output_string] # vervangt html info en blanks door een spatie
f2.write[text] # wegschrijven van de txt-file
f2.close[]
parser[]
Cảm ơn
Bởi Vicky qua Thảo luận về Python. org lúc 25 tháng 3 năm 2022 21. 34
Xin chào, tôi đang cố gắng viết một chương trình nhỏ sẽ mở liên tục
tất cả các tệp có một. html ở một vị trí, hãy thực hiện một số công việc trên
chúng và sau đó lưu chúng bằng cùng một tên nhưng với. phần mở rộng txt.Đây là những gì tôi có. Mã không đưa ra bất kỳ lỗi nào nhưng các tệp mới không được tạo và tôi có ấn tượng rằng không có gì xảy ra
Không hẳn. Tôi khuyên bạn nên thực hiện một số cuộc gọi in. Nếu không có gì khác, a
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
8 ở đầu vòng lặp sẽ cho bạn biết tệp nào đang đượcxử lý [hoặc ít nhất, được cho là đang được xử lý, .
see below].
Chức năng trình phân tích cú pháp tự hoạt động [Tôi đã thử nó trên một tệp riêng biệt và nó hoạt động tốt]
Cá nhân tôi sẽ làm cho
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
9 hoạt động trên một tệp duy nhất và gọi nótrong một vòng lặp. Nó đơn giản hóa chức năng rất nhiều.
Tuy nhiên, mã thực tế của bạn
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
Vấn đề lớn ở đây là bạn đang mở các tên tệp cố định ở đây, chứ không phải
tên từ vòng lặp. Đây.
f = open['file', 'a+', encoding='utf8']
mở tệp có tên là
f = open['file', 'a+', encoding='utf8']
0 chứ không phải tệp được đặt tên theo biến của bạnf = open['file', 'a+', encoding='utf8']
1. Điều này cũng vậy. Input the Filename: abc.java The extension of the file is : 'java'2
mở tên tệp
f = open['file', 'a+', encoding='utf8']
2, không phải tên tệp bắt nguồn từbiến của bạn
f = open['file', 'a+', encoding='utf8']
1. Một cái gì đó như thế này
Input the Filename: abc.java The extension of the file is : 'java'5
Tôi sẽ sử dụng các tên biến rõ ràng hơn, chẳng hạn như “html_filename” và
“text_filename”, chẳng hạn.
Input the Filename: abc.java The extension of the file is : 'java'6
Đó là vấn đề chính của bạn. Tuy nhiên, có một số
điều khác cần lưu ý.
Input the Filename: abc.java The extension of the file is : 'java'7
Thao tác này sẽ mở tệp để nối thêm, ở chế độ đọc/ghi. Bạn chỉ muốn
đọc nó.
Input the Filename: abc.java The extension of the file is : 'java'8
Đây
Input the Filename: abc.java The extension of the file is : 'java'9
cũng mở để chắp thêm, ở chế độ đọc/ghi. Trong khi tôi cho rằng bạn chỉ
muốn viết nó.
fname = input['Enter the file name: '] fhand = open[fname] count = 0 for line in fhand: if line.startswith['Subject:']: count = count + 1 fhand.close[] print['There were', count, 'subject lines in', fname]0
Nhưng có một cách thậm chí còn tốt hơn. viết độc quyền. Điều này không ngăn
những người viết khác, nó chỉ lỗi nếu tệp đã tồn tại, tránh
sự cố.
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
0Tôi nhận thấy bạn không đóng
f = open['file', 'a+', encoding='utf8']
4. Nó sẽ bị đóng khi bạn mở tệptiếp theo, do tác dụng phụ của việc
f = open['file', 'a+', encoding='utf8']
4 không còn đề cập đến tệpđã mở trước đó nữa và do đó, số lượng tham chiếu của tệp đó . Nhưng tốt hơn hết là bạn nên đóng
that file gets closed and freed from memory. But it is better to close
những thứ đáng tin cậy và kịp thời. Thành ngữ tiêu chuẩn cho điều này là như thế này.
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
1Thao tác này sẽ mở tệp để đọc, đọc văn bản vào
f = open['file', 'a+', encoding='utf8']
6 rồiđóng tệp ngay khi bạn thoát khỏi câu lệnh with.
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
2Cái này gọn gàng và đơn giản. Nếu bạn thấy mình đang thực hiện phân tích cú pháp HTML
phức tạp hơn, tôi khuyên bạn nên xem gói BeautifulSoup, có tên
f = open['file', 'a+', encoding='utf8']
7. beautifulsoup4 · PyPINgoài ra, theo thông lệ chung với các chuỗi biểu thức chính quy, tôi khuyên bạn
sử dụng “chuỗi thô”.
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
3Việc mở đầu
f = open['file', 'a+', encoding='utf8']
8 làm cho biểu thức trở thành "chuỗi thô", trong đó dấu gạch chéo ngược[
f = open['file', 'a+', encoding='utf8']
9] không có gì đặc biệt. Vì các biểu thức chính quy thường có nhiềudấu gạch chéo ngược, chẳng hạn như
Input the Filename: abc.java The extension of the file is : 'java'20 để khớp với một chữ số, điều này tránh được rất nhiều
nhân đôi dấu gạch chéo ngược gây đau đớn.
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
4Tôi sẽ hoãn mở cửa của
Input the Filename: abc.java The extension of the file is : 'java'21 cho đến đây và sẽ đóng lại ngay lập tức
.
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
5Tôi hy vọng điều này hữu ích,
Cameron Simpson cs@cskk. Tôi. au
Cảm ơn bạn đã cung cấp mô tả rõ ràng và đầy đủ về vấn đề của mình, hành vi thực tế và dự kiến mà bạn đang gặp phải, đồng thời bao gồm mã được định dạng đẹp mắt của bạn trong một
Input the Filename: abc.java The extension of the file is : 'java'22. Điều này thực sự giúp chúng tôi rất nhiều trong việc đưa ra câu trả lời tốt hơn cho câu hỏi của bạn
Ngoài ra, khi bạn nói tiếng Hà Lan, bạn có lợi thế hơn tất cả chúng tôi khi hiểu Python
Input the Filename: abc.java The extension of the file is : 'java'23]
Khi tôi đang gõ câu trả lời này, @soil đã đăng một câu xác định chính xác vấn đề chính, rằng bạn đang mở một tệp có tên
f = open['file', 'a+', encoding='utf8']
1 trong thư mục hiện tại và đọc từ đó, thay vì từ tệp bạn dự định [được đặt tên theo biến f = open['file', 'a+', encoding='utf8']
1] . Tôi thấy @soil đã cập nhật nhận xét của họ để thêm phần này] nối thêm nội dung của từng tệp HTML vào một tệp có tên Input the Filename: abc.java The extension of the file is : 'java'26 trong thư mục hiện tại. Ngoài ra, câu trả lời của @cameron, cũng được đăng trong khi tôi viết bài này, đã giải quyết một số điểm khác mà tôi đang thực hiện, liên quan đến việc sử dụng các chế độ tệp chính xác cho từng thao tác [điều này sẽ cho phép bạn bắt cả hai lỗi dễ dàng hơn nhiều
Tuy nhiên, cả hai giải pháp của họ để đổi tên tệp trong trường hợp ghi đều không thực sự hiệu quả, vì
f = open['file', 'a+', encoding='utf8']
1 [hoặc Input the Filename: abc.java The extension of the file is : 'java'29, trong ví dụ của @cameron] không phải là một chuỗi, mà là một đối tượng
Input the Filename: abc.java The extension of the file is : 'java'50 [và nếu là, @
Đây là một điều tốt [và bạn thật thông minh khi sử dụng pathlib], vì điều này thực sự cho phép một giải pháp đơn giản hơn, dễ dàng hơn và mạnh mẽ hơn. Bạn chỉ có thể sử dụng
Input the Filename: abc.java The extension of the file is : 'java'52 /
Input the Filename: abc.java The extension of the file is : 'java'53 để có cùng đường dẫn với tiện ích mở rộng
Input the Filename: abc.java The extension of the file is : 'java'54 thay vì
Input the Filename: abc.java The extension of the file is : 'java'51. tôi. e
import re # de module regular expressions wordt geïmporteerd.
from pathlib import Path
import os
source_dir = Path['/VGw_LanguageDetector']
files = source_dir.glob['*.html']
def parser[]:
for file in files:
f = open['file', 'a+', encoding='utf8']
f2 = open['filename.txt', 'a+', encoding='utf8'] # creëert een nieuwe file om de output naar weg te schrijven
6Ngoài ra, vì bạn đang sử dụng pathlib, bạn thực sự có thể sử dụng một cách tiếp cận đơn giản hơn để mở, đọc/ghi và đóng tất cả tệp trong một dòng mà không cần phải sử dụng khối
Input the Filename: abc.java The extension of the file is : 'java'27