เปลี่ยนชื่อไฟล์. html จากแท็ก <title> ด้วย python

Sep 23 2020

ฉันมีไฟล์ 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')

วิธีที่ดีกว่านี้?

คำตอบ

CertainPerformance Sep 23 2020 at 21:08

การเว้นวรรคสำหรับรหัส 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)