ตัวเลือกของบรรณาธิการ:

การโฆษณา

บ้าน - บริการ
ระดับสูง รายการใน Python

ใน Python ตัวสร้างแบบธรรมดาและตัวสร้างรายการเป็นสองสิ่งที่แตกต่างกัน มีปัญหาในการแปลจากภาษาอังกฤษ ที่เราเคยเรียกว่า list Generator ในภาษาอังกฤษมีเสียงประมาณว่า " รายการความเข้าใจ“และไม่เกี่ยวอะไรกับเครื่องกำเนิดไฟฟ้า

คำว่า "ความเข้าใจ" (ความเข้าใจ ความเข้าใจ) ดูเหมือนจะไม่อยู่ในหัวข้อเมื่อแปลเป็นภาษารัสเซีย ปรากฎบางอย่างเช่น "รายการความเข้าใจ" ดังนั้นเราจึงพูดว่า "ตัวสร้างรายการ" ซึ่งหมายถึงคำว่า "ตัวสร้าง" ไม่ใช่วัตถุ แต่เป็นโครงสร้างทางวากยสัมพันธ์ที่สร้างนั่นคือสร้างรายการ

ในทางกลับกัน ออบเจ็กต์ตัวสร้างเป็นออบเจ็กต์ฟังก์ชันพิเศษที่คงสถานะไว้ระหว่างการโทร ใน for loop พวกมันจะทำงานเหมือนอ็อบเจ็กต์ที่สามารถทำซ้ำได้ ซึ่งรวมถึงรายการ พจนานุกรม สตริง ฯลฯ อย่างไรก็ตาม ตัวสร้างรองรับเมธอด __next__() ซึ่งหมายความว่าพวกมันคือประเภทของตัววนซ้ำ

วิธีที่รวดเร็วในการสร้างวัตถุตัวสร้างที่ค่อนข้างง่ายคือนิพจน์ตัวสร้าง - การแสดงออกของเครื่องกำเนิด- ไวยากรณ์ของนิพจน์เหล่านี้คล้ายคลึงกับตัวสร้างรายการ อย่างไรก็ตามพวกเขากลับมา ประเภทต่างๆวัตถุ อย่างแรกคือวัตถุตัวกำเนิด ประการที่สองคือรายการ

มาดูตัวสร้างรายการก่อนเพื่อทำความคุ้นเคยกับโครงสร้างวากยสัมพันธ์

เครื่องกำเนิดรายการ

ใน Python ตัวสร้างรายการช่วยให้คุณสร้างและเติมรายการได้อย่างรวดเร็ว

การสร้างวากยสัมพันธ์ของตัวสร้างรายการจะถือว่ามีอ็อบเจ็กต์หรือตัววนซ้ำที่สามารถทำซ้ำได้ บนพื้นฐานของสิ่งนั้นจะถูกสร้างขึ้น รายการใหม่เช่นเดียวกับนิพจน์ที่จะทำบางอย่างกับองค์ประกอบที่ดึงมาจากลำดับก่อนที่จะเพิ่มลงในรายการที่สร้างขึ้น

>>> a = [ 1 , 2 , 3 ] >>> b = [ i+10 สำหรับ i ใน a] >>> a [ 1 , 2 , 3 ] >>> b [ 11 , 12 , 13 ]

ในตัวอย่างข้างต้น ตัวสร้างรายการคือนิพจน์ นี่คือวัตถุที่สามารถทำซ้ำได้ ในกรณีนี้จะเป็นรายการอื่น แต่ละองค์ประกอบจะถูกดึงออกมาใน for loop ก่อนหน้านั้น มีการอธิบายการดำเนินการที่ดำเนินการกับองค์ประกอบก่อนที่จะเพิ่มลงในรายการใหม่

โปรดทราบว่าตัวสร้างจะสร้างรายการใหม่และไม่แก้ไขรายการที่มีอยู่ หากคุณต้องการเปลี่ยนตัวแปรปัจจุบัน คุณจะต้องกำหนดค่าใหม่ให้กับตัวแปรดังกล่าว:

>>> a = [ 1 , 2 , 3 ] >>> a = [ i+10 สำหรับ i ใน a] >>> a [ 11 , 12 , 13 ]

ตัวสร้างรายการถูกจัดประเภทเป็น "น้ำตาลเชิงวากยสัมพันธ์" ของภาษา การเขียนโปรแกรมหลาม- กล่าวอีกนัยหนึ่งคุณสามารถทำได้โดยไม่มีสิ่งเหล่านั้น:

>>> สำหรับดัชนี ค่าในรูปแบบแจกแจง (a) : ... a [ index] = value + 10 ... >>> a [ 11 , 12 , 13 ]

หากโปรแกรมสามารถมีการอ้างอิงหลายรายการ ต้องใช้เครื่องกำเนิดไฟฟ้าอย่างระมัดระวัง:

>>> ls0 = [ 1 , 2 , 3 ] >>> ls1 = ls0 >>> ls1.ผนวก (4 ) >>> ls0 [ 1 , 2 , 3 , 4 ] >>> ls1 = [ i+1 สำหรับ ฉันอยู่ใน ls1] >>> ls1 [ 2 , 3 , 4 , 5 ] >>> ls0 [ 1 , 2 , 3 , 4 ]

ที่นี่เราถือว่าการเปลี่ยนแปลงรายการผ่านตัวแปรหนึ่งจะมองเห็นได้ผ่านอีกตัวแปรหนึ่ง อย่างไรก็ตาม หากคุณเปลี่ยนรายการด้วยตัวสร้าง ตัวแปรจะชี้ไปยังรายการอื่น

วัตถุที่วนซ้ำใน for loop อาจเป็นได้มากกว่าแค่รายการ ในตัวอย่างด้านล่าง บรรทัดจากไฟล์จะถูกวางลงในรายการ

>>> เส้น = [ line.strip () สำหรับบรรทัดที่เปิด ("text.txt" ) ] >>> เส้น [ "หนึ่ง" , "สอง" , "สาม" ]

คุณสามารถเพิ่มเงื่อนไขให้กับตัวสร้างรายการได้:

>>> จากการนำเข้าแบบสุ่ม randint >>> nums = [ randint(10 , 20 ) สำหรับฉันในช่วง (10 ) ] >>> nums [ 18 , 17 , 11 , 11 , 15 , 18 , 11 , 20 , 10 , 19 ] >>> nums = [ i สำหรับ i เป็น nums ถ้า i%2 == 0 ] >>> nums [ 18 , 18 , 20 , 10 ]

ตัวสร้างรายการสามารถมีลูปแบบซ้อนได้:

>>> a = "12" >>> b = "3" >>> c = "456" >>> หวี = [ i+j+k สำหรับ i ใน a สำหรับ j ใน b สำหรับ k ใน c] >> > หวี [ "134" , "135" , "136" , "234" , "235" , "236" ]

พจนานุกรมและชุดเครื่องกำเนิดไฟฟ้า

หากคุณแทนที่วงเล็บเหลี่ยมด้วยวงเล็บปีกกาในนิพจน์ตัวสร้างรายการ คุณจะไม่ได้รับรายการ แต่เป็นพจนานุกรม:

>>> a = ( i:i**2 สำหรับฉันอยู่ในช่วง (11, 15) ) >>> a ( 11: 121, 12: 144, 13: 169, 14: 196)

ในกรณีนี้ ไวยากรณ์ของนิพจน์ที่อยู่หน้า for จะต้องสอดคล้องกับพจนานุกรม กล่าวคือ รวมคีย์และค่าที่คั่นด้วยเครื่องหมายทวิภาค หากไม่เป็นเช่นนั้น ชุดจะถูกสร้างขึ้น:

>>> a = ( i สำหรับฉันอยู่ในช่วง (11 , 15 ) ) >>> ชุด ([ 11 , 12 , 13 , 14 ] ) >>> b = ( 1 , 2 , 3 ) >>> b ชุด ([ 1 , 2 , 3 ] )

เครื่องกำเนิดไฟฟ้า

นิพจน์ที่สร้างอ็อบเจ็กต์ตัวสร้างจะคล้ายกับนิพจน์ที่สร้างรายการ พจนานุกรม และชุด โดยมีข้อยกเว้นหนึ่งประการ ในการสร้างวัตถุตัวสร้าง คุณต้องใช้วงเล็บ:

>>> a = (i สำหรับฉันอยู่ในช่วง (2 , 8 ) ) >>> a< generator object < genexpr>ที่ 0x7efc88787910 > >>> สำหรับฉันใน: ... พิมพ์ (i) ... 2 3 4 5 6 7

จะไม่สามารถวนซ้ำผ่านตัวสร้างเป็นครั้งที่สองใน for loop ได้เนื่องจากวัตถุตัวสร้างได้สร้างค่าทั้งหมดตาม "สูตร" ที่ฝังอยู่ในนั้นแล้ว ดังนั้น เครื่องกำเนิดไฟฟ้ามักจะใช้เมื่อคุณต้องการวนซ้ำอ็อบเจ็กต์ที่ทำซ้ำได้หนึ่งครั้ง

นอกจากนี้ เครื่องกำเนิดไฟฟ้ายังประหยัดหน่วยความจำ เนื่องจากไม่ได้เก็บค่าทั้งหมดของรายการขนาดใหญ่ แต่มีเพียงองค์ประกอบก่อนหน้า ขีด จำกัด และสูตรที่ใช้ในการคำนวณองค์ประกอบถัดไป

นิพจน์ที่สร้างตัวสร้างเป็นเวอร์ชันชวเลขดังต่อไปนี้:

>>> def func(เริ่มต้น, สิ้นสุด) : ... ในขณะที่เริ่มต้น< finish: ... yield start * 0.33 ... start += 1 ... >>> a = func(1 , 4 ) >>> ก< generator object func at 0x7efc88787a50 >>>> สำหรับฉัน ใน: ... พิมพ์ (i) ... 0.33 0.66 0.99

หากคุณไม่จำเป็นต้องใช้ฟังก์ชันหลายครั้ง การใช้นิพจน์จะง่ายกว่า:

>>> b = (i*0.33 สำหรับฉัน อยู่ในช่วง (1 , 4 ) ) >>> b< generator object < genexpr>ที่ 0x7efc88787960 > >>> สำหรับฉัน ใน b: ... พิมพ์ (i) ... 0.33 0.66 0.99

| |

ความเข้าใจรายการช่วยให้คุณสร้างรายการตามรายการที่มีอยู่ได้อย่างรวดเร็ว เมื่อใช้ตัวสร้าง คุณสามารถสร้างรายการตามประเภทข้อมูลที่ทำซ้ำได้ (เช่น สตริงหรือสิ่งอันดับ)

ด้วยเหตุนี้ ลูปจะสร้างรายการเดียวกัน:

["8", "h", "o", "s", "t"]

นิพจน์แบบมีเงื่อนไขในตัวสร้างรายการ

ตัวสร้างรายการสามารถใช้นิพจน์แบบมีเงื่อนไขเพื่อแก้ไขรายการที่มีอยู่หรือชนิดข้อมูลตามลำดับอื่นๆ ส่งผลให้เกิดรายการใหม่

ลองดูตัวสร้างที่มีคำสั่ง if:

fish_tuple = ("ปลาปักเป้า", "ปลาการ์ตูน", "ปลาดุก", "ปลาหมึกยักษ์")
รายการปลา =
พิมพ์ (รายการปลา)

รายการใช้ทูเพิล fish_tuple เป็นพื้นฐานสำหรับ fish_list ใหม่

คำสำคัญ for และ in ถูกใช้ในลักษณะเดียวกับขนาดก่อนหน้า นอกจากนี้ ตัวสร้างยังมีคำสั่ง if ซึ่งทำให้แยกสตริง 'octopus' ออกจากรายการ

ค้นหาเนื้อหาของ fish_list และตรวจสอบให้แน่ใจว่ามีองค์ประกอบ fish_tuple ทั้งหมด ยกเว้น 'octopus'

["ปลาปักเป้า", "ปลาการ์ตูน", "ปลาดุก"]

อย่างที่คุณเห็น การใช้นิพจน์แบบมีเงื่อนไขทำให้คุณสามารถแยกองค์ประกอบบางอย่างออกจากรายการใหม่ได้

ตอนนี้เรามาดูอีกตัวอย่างหนึ่งที่ใช้การดำเนินการทางคณิตศาสตร์ ตัวเลข และเมธอด range()


พิมพ์(หมายเลข_รายการ)

อ่านเพิ่มเติม:

รายการใหม่ number_list จะมีค่ากำลังสองของแต่ละองค์ประกอบคู่ในช่วงตั้งแต่ 0-9 ผลลัพธ์จะเป็นรายการดังนี้:

ลองดูตัวอย่างนี้ทีละขั้นตอน ถ้าแทนที่จะเป็น x ** 2 สำหรับ x เราใช้แค่ x สำหรับ x รายการจะมีลักษณะดังนี้:

number_list=
พิมพ์(หมายเลข_รายการ)

หลังจากนั้น นิพจน์แบบมีเงื่อนไขจะถูกเพิ่มเข้าไปในตัวสร้าง:

number_list=
พิมพ์(หมายเลข_รายการ)

คำสั่ง if จะตัดเลขคี่ทั้งหมดออกจากรายการ

ตอนนี้สิ่งที่เหลืออยู่คือการเพิ่มตัวดำเนินการที่จะยกกำลังสององค์ประกอบทั้งหมด:

number_list=
พิมพ์(หมายเลข_รายการ)

ตอนนี้แต่ละองค์ประกอบของรายการจะถูกยกกำลังสอง

คุณยังสามารถใช้คำสั่งซ้อนกันได้หากในตัวสร้าง:

number_list=
พิมพ์(หมายเลข_รายการ)

วันนี้ผมจะพูดถึงประเภทข้อมูลเช่น รายการการดำเนินการกับรายการเหล่านั้นและวิธีการ เกี่ยวกับตัวสร้างรายการและการใช้รายการ

รายการอะไรบ้าง?

รายการใน Python ได้รับการเรียงลำดับ คอลเลกชันอ็อบเจ็กต์ประเภทต่างๆ ที่ไม่แน่นอน (คล้ายกับอาร์เรย์ แต่ประเภทอาจแตกต่างกัน)

หากต้องการใช้รายการ คุณจะต้องสร้างรายการเหล่านั้น มีหลายวิธีในการสร้างรายการ ตัวอย่างเช่น คุณสามารถประมวลผลอ็อบเจ็กต์ที่สามารถทำซ้ำได้ (เช่น ) ด้วยฟังก์ชันในตัว รายการ:

>>> รายการ ("รายการ") ["รายการ"]

คุณยังสามารถสร้างรายการโดยใช้ตัวอักษร:

>>> s = # รายการว่าง >>> l = [ "s" , "p" , [ "isok" ], 2 ] >>> s >>> l ["s", "p", ["isok" "], 2]

ดังที่คุณเห็นจากตัวอย่าง รายการสามารถมีออบเจ็กต์จำนวนเท่าใดก็ได้ (รวมถึงรายการที่ซ้อนกัน) หรือไม่มีอะไรเลย

และอีกวิธีหนึ่งในการสร้างรายการก็คือ เครื่องกำเนิดรายการ- ตัวสร้างรายการเป็นวิธีหนึ่งในการสร้างรายการใหม่โดยใช้นิพจน์กับแต่ละองค์ประกอบของลำดับ ตัวสร้างรายการมีความคล้ายคลึงกับการวนซ้ำมาก

>>> c = [ c * 3 สำหรับ c ใน "รายการ" ] >>> c ["lll", "iii", "sss", "ttt"]

การออกแบบตัวสร้างรายการที่ซับซ้อนมากขึ้นก็เป็นไปได้เช่นกัน:

>>> c = [ c * 3 สำหรับ c ใน "รายการ" ถ้า c != "i" ] >>> c ["lll", "sss", "ttt"] >>> c = [ c + d สำหรับ c ใน "รายการ" ถ้า c != "i" สำหรับ d ใน "สแปม" if d != "a" ] >>> c ["ls", "lp", "lm", "ss", "sp", "sm", "ts", "tp", "tm"]

แต่ในกรณีที่ยากลำบากควรใช้แบบปกติจะดีกว่า สำหรับวงเพื่อสร้างรายการ

แสดงรายการฟังก์ชันและวิธีการ

สร้างแล้ว ตอนนี้คุณต้องทำอะไรบางอย่างกับรายการ มีวิธีการพื้นฐานและรายการสำหรับรายการ

ตาราง "รายการวิธีการ"

วิธีทำอะไร
รายการผนวก(เอ็กซ์)เพิ่มองค์ประกอบที่ส่วนท้ายของรายการ
รายการ.ขยาย(ญ)ขยายรายการโดยการผนวกองค์ประกอบทั้งหมดของรายการ L
รายการแทรก(ฉัน x)แทรกค่า x บนองค์ประกอบ i-th
รายการ.ลบ(เอ็กซ์)ลบองค์ประกอบแรกในรายการที่มีค่า x ValueError หากไม่มีองค์ประกอบดังกล่าวอยู่
รายการ.ป๊อป([ฉัน])ลบองค์ประกอบ i-th และส่งคืน หากไม่ได้ระบุดัชนี องค์ประกอบสุดท้ายจะถูกลบออก
รายการ.ดัชนี(เอ็กซ์, ])ส่งกลับตำแหน่งขององค์ประกอบแรกที่มีค่า x (ค้นหาตั้งแต่ต้นจนจบ)
รายการนับ(เอ็กซ์)ส่งกลับจำนวนองค์ประกอบที่มีค่า x
รายการเรียงลำดับ() เรียงลำดับรายการตามฟังก์ชัน
รายการย้อนกลับ() ขยายรายการ
รายการ.สำเนา() สำเนาตื้นของรายการ
รายการ.ชัดเจน() ล้างรายการ

ควรสังเกตว่าเมธอด list ต่างจาก , แก้ไขรายการเอง และดังนั้นจึงไม่จำเป็นต้องเขียนผลลัพธ์การดำเนินการลงในตัวแปรนี้

>>> ลิตร = [ 1 , 2 , 3 , 5 , 7 ] >>> ลิตร . เรียงลำดับ() >>> l >>> l = l เรียงลำดับ () >>> พิมพ์ (l) ไม่มี

และสุดท้าย ตัวอย่างการทำงานกับรายการ:

>>> a = [ 66.25 , 333 , 333 , 1 , 1234.5 ] >>> พิมพ์ ( a . count ( 333 ), a . count ( 66.25 ), a . count ( "x" )) 2 1 0 >>> ก. แทรก (2 , - 1 ) >>> ก ผนวก (333 ) >>> >>> ก. ดัชนี (333 ) 1 >>> ก . ลบ (333 ) >>> ก >>> ก. ย้อนกลับ() >>> >>> ก. เรียงลำดับ() >>> [-1, 1, 66.25, 333, 333, 1234.5]

ในบางครั้ง เพื่อเพิ่มประสิทธิภาพการทำงาน รายการจะถูกแทนที่ด้วยรายการที่มีความยืดหยุ่นน้อยกว่ามาก

ภาษาการเขียนโปรแกรม Pyrhon มีโครงสร้างวากยสัมพันธ์พิเศษที่ช่วยให้คุณสามารถสร้างรายการที่เสร็จสมบูรณ์ตามกฎบางอย่างได้ รายการที่สร้างขึ้นอาจแตกต่างกัน เนื้อหาของโครงสร้างอาจแตกต่างกันได้ ซึ่งเป็นเหตุผลว่าทำไมจึงเรียกว่าตัวสร้างรายการ สะดวกเนื่องจากรายการไม่ยาวเท่ากับวิธีการสร้างรายการแบบดั้งเดิม

ตัวอย่างเช่น คุณต้องมีรายการจำนวนธรรมชาติจนถึงจำนวนเฉพาะ วิธีดั้งเดิมจะมีลักษณะดังนี้:

>>> a = >>> for i อยู่ในช่วง(1,15): ... a.append(i) ... >>>

รายการใช้โค้ดสามบรรทัด และเครื่องกำเนิดไฟฟ้าต้องการเพียงสิ่งเดียวเท่านั้น:

>>> ก = >>> ก

โครงสร้างเป็นตัวสร้างรายการ การออกแบบทั้งหมดจะต้องอยู่ในรายการสี่เหลี่ยมจัตุรัส ซึ่งสะท้อนถึงการสร้างรายการ ภายในวงเล็บมีสามส่วน:

  1. เราจะทำอย่างไรกับองค์ประกอบต่างๆ (ในสถานการณ์ของเรา เราไม่ได้ทำอะไรเลย เราแค่เพิ่มองค์ประกอบเหล่านั้นลงในรายการ)
  2. เราจะเอาอะไรไป (เราใช้องค์ประกอบ i)
  3. เราจะเอามันมาจากไหน (จากวัตถุช่วง) ในการแยกส่วนต่างๆ เราใช้คำสำคัญในและเพื่อ

ลองดูตัวอย่าง

>>> ก = >>> ข = >>> ข

ในสถานการณ์นี้ เราจะนำแต่ละรายการออกจากรายการแล้วยกกำลังสอง จากที่นี่:

  1. สิ่งที่เราทำคือกำลังสององค์ประกอบของเรา
  2. เอาล่ะ - องค์ประกอบ
  3. จาก: จากรายการ ก.
>>> a = (1:10, 2:20, 3:30) >>> b = สำหรับฉัน ใน a] >>> b

ที่นี่เราใช้คีย์ในพจนานุกรม และผลิตภัณฑ์ของคีย์และค่าที่มีอยู่จะรวมอยู่ในรายการที่สร้างขึ้น

>>> a = (1:10, 2:20, 3:30) >>> b = [] สำหรับฉัน ใน a] >>> b [, , ] >>> c = >>> c

ในกรณีนี้ รายการ b มีรายการที่ซ้อนกัน การละเว้นวงเล็บเหลี่ยมในนิพจน์ ] ในเครื่องมือสร้างจะส่งผลให้เกิดข้อผิดพลาด หากคุณต้องการรายการระดับเดียวที่มีคีย์จากค่าพจนานุกรม คุณจะต้องนำแต่ละรายการที่ซ้อนกันและรับแต่ละส่วนประกอบจากที่นั่น นี้จะกระทำโดยใช้โครงสร้างที่ซ้อนกัน ไวยากรณ์ดั้งเดิมสำหรับการสร้างรายการมีดังนี้:

>>> c = >>> for i ใน b: ... สำหรับ j ใน i: ... c.append(j) ... >>> c

ตัวสร้างรายการสามารถเสริมด้วยโครงสร้าง if ได้ ตัวอย่างเช่น คุณต้องแยกตัวเลขทั้งหมดออกจากสตริง:

>>> ก = "lsj94ksd231 9" >>> ข =

หรือกรอกรายการด้วยตัวเลขที่เป็นทวีคูณของ 31 หรือ 30:

>>> ก = >>> ก

การสร้างรายการด้วยวิธีนี้ง่ายและรวดเร็วยิ่งขึ้น แต่ไม่เหมาะสำหรับการแทนที่โครงสร้างที่ค่อนข้างซับซ้อน ตัวอย่างเช่น หากเงื่อนไขการตรวจสอบมีสาขาอื่น

เงินหมดและยังมีอีกสองสามสัปดาห์ก่อนถึงวันจ่ายเงินเดือน? คุณสามารถยืมได้ แต่ถ้าคุณไม่มีใครล่ะ? อย่าไปธนาคารเพื่อขอสินเชื่อ ในกรณีนี้สินเชื่อรายย่อยจะช่วยคุณได้ เพียงไปที่เว็บไซต์ กรอกใบสมัคร (ง่ายและรวดเร็วมาก) แล้วคุณก็จะได้รับเงินในไม่กี่นาที! สะดวกรวดเร็วมาก และที่สำคัญ ไม่ต้องถามใคร!

ภาษาการเขียนโปรแกรมทุกภาษามีคุณสมบัติอย่างหนึ่ง นั่นคือโครงสร้างที่ซับซ้อน แต่เป็นสิ่งที่ทำให้ง่ายขึ้นเป็นพิเศษ หากคุณเคยเขียนเป็นภาษาอื่นมาก่อน คุณอาจไม่สนใจเรื่องนี้ เนื่องจากคุณ ภาษาเก่าไม่ได้ทำให้สิ่งนี้ง่ายขึ้นมากนัก (เพราะเขายุ่งอยู่กับการทำให้สิ่งอื่นง่ายขึ้นมาก) ในบทนี้ คุณจะได้เรียนรู้รายการ พจนานุกรม และตัวสร้างการตั้งค่า—แนวคิดสามประการที่เกี่ยวข้องกันซึ่งมีศูนย์กลางอยู่ที่เทคโนโลยีอันทรงพลังเพียงหนึ่งเดียว แต่ก่อนอื่น ฉันต้องการอ้อมเล็กน้อยเพื่อบอกคุณเกี่ยวกับสองโมดูลที่จะช่วยคุณนำทางระบบไฟล์ในเครื่องของคุณ

การทำงานกับไฟล์และไดเร็กทอรี

Python 3 มาพร้อมกับโมดูล ระบบปฏิบัติการซึ่งหมายความว่า " ระบบปฏิบัติการ- มีฟังก์ชันมากมายสำหรับรับข้อมูลเกี่ยวกับไดเร็กทอรี ไฟล์ กระบวนการและในเครื่อง ตัวแปรสภาพแวดล้อม(และในบางกรณีก็เพื่อจัดการพวกมัน) Python นำเสนอการรวมเป็นหนึ่งเดียวที่ดีมาก อินเทอร์เฟซซอฟต์แวร์สำหรับ ระบบปฏิบัติการที่รองรับทั้งหมดเพื่อให้โปรแกรมของคุณสามารถทำงานบนคอมพิวเตอร์เครื่องใดก็ได้โดยใช้โค้ดขั้นต่ำที่ขึ้นอยู่กับแพลตฟอร์ม

ไดเร็กทอรีการทำงานปัจจุบัน

เมื่อคุณเริ่มเรียน Python ครั้งแรก คุณจะใช้เวลาไปกับมันมาก เชลล์ Python แบบโต้ตอบ- ตลอดหนังสือเล่มนี้ คุณจะเห็นตัวอย่างที่มีลักษณะดังนี้:

  1. การนำเข้าโมดูลจากโฟลเดอร์ตัวอย่าง
  2. การเรียกใช้ฟังก์ชันจากโมดูลนี้
  3. คำอธิบายของผลลัพธ์

มีไดเร็กทอรีการทำงานปัจจุบันอยู่เสมอ

หากคุณไม่รู้อะไรเกี่ยวกับไดเร็กทอรีการทำงานปัจจุบัน อาจเป็นไปได้ว่าขั้นตอนที่ 1 จะล้มเหลวและเกิดข้อยกเว้น เช่น ข้อผิดพลาดในการนำเข้า- ทำไม เพราะ Python จะค้นหาโมดูลที่ระบุมา เส้นทางการค้นหาของโอเปอเรเตอร์ นำเข้าแต่จะไม่พบเนื่องจากไดเรกทอรีตัวอย่างไม่อยู่ในเส้นทางการค้นหา เพื่อแก้ไขปัญหานี้ คุณสามารถทำสิ่งใดสิ่งหนึ่งจากสองสิ่งนี้:

  • หรือเพิ่มโฟลเดอร์ตัวอย่างลงในพาธการค้นหาของโอเปอเรเตอร์ นำเข้า;
  • หรือทำให้โฟลเดอร์ตัวอย่างเป็นไดเร็กทอรีการทำงานปัจจุบัน

ไดเร็กทอรีการทำงานปัจจุบันเป็นพารามิเตอร์โดยนัยที่ Python เก็บไว้ในหน่วยความจำตลอดเวลา ไดเร็กทอรีการทำงานปัจจุบันจะอยู่ที่นั่นเสมอเมื่อคุณทำงานในเชลล์ Python แบบโต้ตอบซึ่งเรียกใช้สคริปต์ของคุณ บรรทัดคำสั่งหรือสคริปต์ CGI ที่ไหนสักแห่งบนเว็บเซิร์ฟเวอร์

โมดูล ระบบปฏิบัติการมีสองฟังก์ชันสำหรับการทำงานกับไดเร็กทอรีการทำงานปัจจุบัน

>>> นำเข้าระบบปฏิบัติการ

>>> พิมพ์(os.getcwd())
C:\Python31

>>> ระบบปฏิบัติการ .chdir()

>>> พิมพ์(os.getcwd())

การทำงานกับชื่อไฟล์และไดเร็กทอรี

เนื่องจากเรากำลังพูดถึงไดเร็กทอรี ฉันต้องการดึงความสนใจของคุณไปที่โมดูล os.path- ประกอบด้วยฟังก์ชันสำหรับการทำงานกับชื่อไฟล์และไดเร็กทอรี

>>> นำเข้าระบบปฏิบัติการ

>>> พิมพ์ (os .path .join ( "/Users/pilgrim/diveintopython3/examples/", "humansize.py") )
/Users/pilgrim/diveintopython3/examples/humansize.py

>>> พิมพ์ (os .path .join ( "/Users/pilgrim/diveintopython3/examples", "humansize.py") )
/Users/pilgrim/diveintopython3/examples\humansize.py

>>> พิมพ์ (os .path .expanduser ("~" ) )
c:\Users\pilgrim

>>> พิมพ์ (os .path .join (os .path .expanduser ("~" ) , "diveintopython3" , "examples" , "humansize.py" ) )
c:\Users\pilgrim\diveintopython3\examples\humansize.py

โมดูล os.pathยังมีฟังก์ชันสำหรับแยกเส้นทางไฟล์ ชื่อโฟลเดอร์ และไฟล์ออกเป็นส่วนต่างๆ

>>> ชื่อพาธ = "/Users/pilgrim/diveintopython3/examples/humansize.py"

>>> os .path .split (ชื่อพาธ)
("/Users/pilgrim/diveintopython3/examples", "humansize.py")

>>> (dirname, ชื่อไฟล์) = os .path .split (ชื่อพาธ)

>>> นามสกุล
"/Users/pilgrim/diveintopython3/examples"

>>>ชื่อไฟล์
"humansize.py"

>>> (ชื่อย่อ, นามสกุล) = os .path .splitext (ชื่อไฟล์)
>>>ชื่อย่อ
"ขนาดมนุษย์"
>>> ส่วนขยาย
".ไพ"

รับเนื้อหาไดเร็กทอรี

โมดูล glob เข้าใจอักขระตัวแทนที่ใช้ในเชลล์

โมดูล โลกเป็นอีกหนึ่งเครื่องมือจากไลบรารีมาตรฐาน Python เป็นวิธีง่ายๆ ในการรับเนื้อหาของโฟลเดอร์โดยทางโปรแกรม และยังใช้ไวด์การ์ด ซึ่งคุณอาจคุ้นเคยหากคุณเคยใช้บรรทัดคำสั่ง

>>> ระบบปฏิบัติการ .chdir ( "/Users/pilgrim/diveintopython3/")
>>> นำเข้าลูกโลก

>>> glob .glob ("ตัวอย่าง/*.xml" )
["ตัวอย่าง \\ฟีด-broken.xml",
"ตัวอย่าง \\ฟีด-ns0.xml",
"ตัวอย่าง \\feed.xml"]

>>> ระบบปฏิบัติการ .chdir ("ตัวอย่าง/" )

>>> glob .glob ("*test*.py" )
["alphameticstest.py" ,
"พหูพจน์test1.py" ,
"pluraltest2.py" ,
"pluraltest3.py" ,
"pluraltest4.py" ,
"พหูพจน์test5.py" ,
"pluraltest6.py" ,
"romantest1.py" ,
"romantest10.py" ,
"romantest2.py" ,
"romantest3.py" ,
"romantest4.py" ,
"romantest5.py" ,
"romantest6.py" ,
"romantest7.py" ,
"romantest8.py" ,
"romantest9.py" ]

รับข้อมูลเกี่ยวกับไฟล์

ระบบปฏิบัติการสมัยใหม่ใดๆ จะจัดเก็บข้อมูลเกี่ยวกับแต่ละไฟล์ (ข้อมูลเมตา): วันที่สร้าง วันที่แก้ไขครั้งล่าสุด ขนาดไฟล์ ฯลฯ Python จัดให้มีไฟล์เดียว อินเทอร์เฟซซอฟต์แวร์เพื่อเข้าถึงข้อมูลเมตานี้ คุณไม่จำเป็นต้องเปิดไฟล์ สิ่งที่คุณต้องมีคือชื่อไฟล์

>>> นำเข้าระบบปฏิบัติการ

>>> พิมพ์(os.getcwd())
c:\Users\pilgrim\diveintopython3\examples

>>> ข้อมูลเมตา = os .stat ("feed.xml")

>>> เมตาดาต้า.st_mtime
1247520344.9537716

>>>เวลานำเข้า

>>> เวลา .localtime (metadata.st_mtime )
เวลา .struct_time (tm_year= 2009, tm_mon= 7, tm_mday= 13, tm_hour= 17, tm_min= 25,
tm_sec= 44 , tm_wday= 0 , tm_yday= 194 , tm_isdst= 1 )

ได้รับเส้นทางที่แน่นอน

ในส่วนก่อนหน้าฟังก์ชัน glob.glob()ส่งคืนรายการเส้นทางสัมพัทธ์ ในตัวอย่างแรก เส้นทางดูเหมือน "examples\feed.xml" และในตัวอย่างที่สอง เส้นทางสัมพัทธ์ยังสั้นกว่านั้นอีก เช่น "romantest1.py" ตราบใดที่คุณยังคงอยู่ในไดเร็กทอรีการทำงานปัจจุบัน เส้นทางที่เกี่ยวข้องเหล่านี้จะช่วยให้คุณสามารถเปิดไฟล์หรือดึงข้อมูลเมตาของไฟล์ได้ แต่ถ้าคุณต้องการได้รับเส้นทางที่แน่นอน นั่นคือ เส้นทางที่มีชื่อไดเร็กทอรีทั้งหมดจนถึงรากหรืออักษรชื่อไดรฟ์ คุณจะต้องใช้ฟังก์ชันนี้ os.path.realpath().

>>> นำเข้าระบบปฏิบัติการ
>>> พิมพ์(os.getcwd())
c:\Users\pilgrim\diveintopython3\examples
>>> พิมพ์ (os .path .realpath ("feed.xml" ) )

c:\Users\pilgrim\diveintopython3\examples\feed.xml

เครื่องกำเนิดรายการ

คุณสามารถใช้นิพจน์ Python ในตัวสร้างรายการได้

ด้วยตัวสร้างรายการ คุณสามารถแมปรายการหนึ่งไปยังอีกรายการหนึ่งได้อย่างง่ายดายโดยการใช้ฟังก์ชันบางอย่างกับแต่ละองค์ประกอบ

>>> a_list = [ 1 , 9 , 8 , 4 ]
>>> [ elem * 2 สำหรับองค์ประกอบใน a_list]
[ 2 , 18 , 16 , 8 ]

>>> a_list
[ 1 , 9 , 8 , 4 ]

>>> a_list = [ elem * 2 สำหรับองค์ประกอบใน a_list]
>>> a_list
[ 2 , 18 , 16 , 8 ]

ตัวสร้างรายการสามารถใช้นิพจน์ Python ใดก็ได้ รวมถึงฟังก์ชันโมดูลด้วย ระบบปฏิบัติการใช้ในการทำงานกับไฟล์และไดเร็กทอรี

>>> นำเข้าระบบปฏิบัติการ , glob
>>> โกลบอล .glob ("*.xml" )
[ "feed-broken.xml" , "feed-ns0.xml" , "feed.xml" ]

>>> [ os .path .realpath (f) สำหรับ f ใน glob .glob ("*.xml" ) ]
["ค:,
"ค:,
"ค:]

เมื่อสร้างรายการ คุณยังสามารถกรองรายการเพื่อละทิ้งค่าบางค่าได้

>>> นำเข้าระบบปฏิบัติการ , glob

>>> [ f สำหรับ f ใน glob .glob ("*.py" ) ถ้า os .stat (f) .st_size > 6000 ]
["pluraltest6.py" ,
"romantest10.py" ,
"romantest6.py" ,
"romantest7.py" ,
"romantest8.py" ,
"romantest9.py" ]

ตัวอย่างตัวสร้างรายการทั้งหมดที่กล่าวถึงใช้นิพจน์ง่ายๆ: การคูณตัวเลขด้วยค่าคงที่ การเรียกใช้ฟังก์ชันเดียว หรือเพียงแค่ส่งคืนองค์ประกอบรายการโดยไม่มีการเปลี่ยนแปลง (หลังการกรอง) แต่เมื่อสร้างรายการ คุณสามารถใช้นิพจน์ที่ซับซ้อนได้

>>> นำเข้าระบบปฏิบัติการ , glob

>>> [ (os .stat (f) .st_size , os .path .realpath (f) ) สำหรับ f ใน glob .glob ("*.xml" ) ]
[(3074, "ค: \\ Users\\ ผู้แสวงบุญ\\ diveintopython3\\ examples\\ feed-broken.xml") ,
(3386, "ค: \\ Users\\ ผู้แสวงบุญ\\ diveintopython3\\ examples\\ feed-ns0.xml") ,
(3070, "ค: \\ Users\\ ผู้แสวงบุญ\\ diveintopython3\\ examples\\ feed.xml") ]
>>>นำเข้าขนาดมนุษย์

>>> [ (humansize.approximate_size (os .stat (f) .st_size , f) สำหรับ f ใน glob .glob ("*.xml" ) ]
[("3.0 KiB" , "feed-broken.xml" ) ,
("3.3 KiB" , "feed-ns0.xml" ) ,
("3.0 KiB" , "feed.xml" ) ]

เครื่องกำเนิดพจนานุกรม

ตัวสร้างพจนานุกรมจะคล้ายกับตัวสร้างรายการ แต่จะสร้างพจนานุกรมแทนรายการ

>>> นำเข้าระบบปฏิบัติการ , glob

>>> ข้อมูลเมตา = [ (f, os .stat (f) ) สำหรับ f ใน glob .glob ("*test*.py" ) ]

>>> ข้อมูลเมตา[ 0 ]
("alphameticstest.py" , nt.stat_result (st_mode= 33206 , st_ino= 0 , st_dev= 0 ,
st_nlink= 0 , st_uid= 0 , st_gid= 0 , st_size= 2509 , st_atime= 1247520344 ,
st_mtime= 1247520344 , st_ctime= 1247520344 ) )

>>> metadata_dict = ( f:os .stat (f) สำหรับ f ใน glob .glob ("*test*.py" ) )

>>> ประเภท (metadata_dict)
< class "dict" >

>>> รายการ (metadata_dict.keys())
[ "romantest8.py" , "pluraltest1.py" , "pluraltest2.py" , "pluraltest5.py" ,
"pluraltest6.py" , "romantest7.py" , "romantest10.py" , "romantest4.py" ,
"romantest9.py" , "pluraltest3.py" , "romantest1.py" , "romantest2.py" ,
"romantest3.py" , "romantest5.py" , "romantest6.py" , "alphameticstest.py" ,
"pluraltest4.py" ]

>>> metadata_dict[ "alphameticstest.py" ] .st_size
2509

เช่นเดียวกับในตัวสร้างรายการ คุณสามารถรวมเงื่อนไขในตัวสร้างพจนานุกรมได้ ถ้าเพื่อกรองลำดับอินพุตโดยใช้นิพจน์แบบมีเงื่อนไขที่ได้รับการประเมินสำหรับแต่ละองค์ประกอบ

>>> นำเข้าระบบปฏิบัติการ , glob , ขนาดมนุษย์



 


อ่าน:


ใหม่

วิธีฟื้นฟูรอบประจำเดือนหลังคลอดบุตร:

การใช้สไตล์ใน Excel วิธีสร้างสไตล์ใหม่ของคุณเอง

การใช้สไตล์ใน Excel วิธีสร้างสไตล์ใหม่ของคุณเอง

หากคุณใช้ตัวเลือกเดียวกันนี้ในการจัดรูปแบบเซลล์ในเวิร์กชีตในสเปรดชีตของคุณอย่างสม่ำเสมอ ขอแนะนำให้สร้างสไตล์การจัดรูปแบบ...

เกิดข้อผิดพลาดอะไรระหว่างการติดตั้ง?

เกิดข้อผิดพลาดอะไรระหว่างการติดตั้ง?

หมายเหตุ: โปรแกรม AutoLISP สามารถทำงานได้บน AutoCAD เวอร์ชันเต็มเท่านั้น โดยจะไม่ทำงานภายใต้ AutoCAD LT (ไม่รวมกรณีโหลด...

สถานภาพทางสังคมของบุคคลในสังคม

สถานภาพทางสังคมของบุคคลในสังคม

เสนอแนะสิ่งที่กำหนดการเลือกสถานะหลักของบุคคล การใช้ข้อความและข้อเท็จจริงของชีวิตทางสังคม ตั้งสมมติฐานสองข้อ และ...

การตีความข้อผิดพลาดแบบเต็ม

การตีความข้อผิดพลาดแบบเต็ม

มีผู้ใช้จำนวนไม่น้อยที่ต้องเผชิญกับปรากฏการณ์หน้าจอสีน้ำเงินแห่งความตาย จะทำอย่างไร (Windows 7 มักเกิดปัญหานี้บ่อยที่สุด)...

ฟีดรูปภาพ อาร์เอสเอส