เปลี่ยนชื่อไฟล์. html จากแท็ก <title> ด้วย python
ฉันมีไฟล์ html จำนวนมากที่บันทึกไว้ในคอมพิวเตอร์ของฉันพวกเขามีแท็กเหมือนกันเช่นนี้Rpi-Cam-Web-Interface- Page 2 - forumและหมายเลขหน้าเปลี่ยน
ฉันต้องการเปลี่ยนชื่อไฟล์เป็นหมายเลขหน้าฉันใช้รหัสนี้:
import re
import os
pattern=re.compile('<title>RPi Cam Web Interface - Page \d*')
for i in os.listdir():
parser=open(i,'r',encoding='utf-8')
m=pattern.search(parser.read())
parser.close()
os.rename(i,m.group()[35:]+'html')
วิธีที่ดีกว่านี้?
คำตอบ
การเว้นวรรคสำหรับรหัส Python ระดับมืออาชีพที่สมเหตุสมผล (หรือสำหรับรหัส Python ใด ๆ ที่คุณหรือคนอื่น ๆ อาจต้องดูในภายหลัง - โดยหลักการแล้วคือรหัสทั้งหมดที่คุณเคยเขียน) คุณควรปฏิบัติตามคำแนะนำสไตล์PEP 8มาตรฐานเพื่อปรับปรุงความสามารถในการอ่าน ในการเริ่มต้นขอแนะนำให้ใส่ช่องว่างระหว่างอาร์กิวเมนต์และตัวดำเนินการและใช้ช่องว่าง 4 ช่องสำหรับการเยื้อง:
pattern = re.compile('<title>RPi Cam Web Interface - Page \d*')
for i in os.listdir():
parser = open(i, 'r', encoding='utf-8')
m = pattern.search(parser.read())
parser.close()
os.rename(i, m.group()[35:] + 'html')
สตริงดิบเป็นความคิดที่ดีที่จะใช้สตริงดิบเมื่อสร้างรูปแบบ Python เพื่อไม่ให้ลำดับการหลีกเลี่ยงถูกตีความและแบ็กสแลชแทนจะถือว่าเป็นอักขระปกติภายในรูปแบบ สำหรับรูปแบบเฉพาะที่คุณใช้อยู่นี้มันไม่จำเป็น แต่ถ้าคุณต้องเปลี่ยนและจับคู่บรรทัดใหม่\nหรือขอบเขตของคำ\bฯลฯ การไม่ใช้สตริงดิบจะส่งผลให้สคริปต์ไม่ทำงานตามที่คาดไว้
กล่าวอีกนัยหนึ่งคือคุณต้องการทำสิ่งต่างๆเช่น:
pattern = re.compile(r'<title>RPi Cam Web Interface - Page \d*')
# ^
รูปแบบที่ฉันเห็น 2 ปัญหาเกี่ยวกับรูปแบบ:
- จำนวนหน้าเป็นตัวเลือกเพราะคุณกำลังจับคู่กับแทน
\d*\d+การใช้\d+เพื่อจับคู่ตัวเลขอย่างน้อยหนึ่งหลักจะทำให้เจตนาของรูปแบบชัดเจนขึ้น (\d*ตรงกับ "ศูนย์หรือมากกว่าตัวเลข") - คุณกำลังแยกหมายเลขหน้าออกจากการจับคู่ด้วย
m.group()[35:]ตนเอง ใช้กลุ่มการจับภาพในรูปแบบแทนที่จะต้องนับตัวบ่งชี้ด้วยตนเอง:
pattern = re.compile(r'<title>RPi Cam Web Interface - Page( \d+)')
# ^^^^^^
# ...
page_number = m.group(1)