Ĉapitro 8 - Legado kaj Skribado Dosieroj
Subtenu la Aŭtoro: Aĉeti la libron sur Amazono aŭ
la libro / ebook pakaĵo rekte Neniu amelo Gazetaro .
Legi la aŭtora aliaj liberaj Python libroj:
Legado kaj skribo Dosieroj
Variabloj estas bonega maniero por stoki datumojn dum via programo
kuras, sed se vi volas viajn datumojn persisti eĉ post via programo
finos, vi devas savi ĝin al dosiero. Vi povas pensi de dosiero enhavo kiel ununura ĉeno valoro, potenciale gigabajtoj en grandeco. En ĉi tiu ĉapitro, vi lernos kiel uzi Python por krei, legi, kaj savu dosierojn sur la malmola disko.
Fajliloj kaj Dosiero Paths
Dosiero havas du ŝlosilaj ecoj: la dosiernomo (kutime skribita kiel unu vorto) kaj vojeton. La vojo specifas la lokon de dosiero sur la komputilo. Ekzemple, estas dosiero en mia Windows 7 tekkomputilo kun la dosiernomo project.docx en la vojo C: \ Uzantoj \ asweigart \ Documents. La parto de la dosiernomo post la lasta periodo estas nomita la dosiero etendo kaj rakontas al vi dosiero tipo. Project.docx estas Word dokumento, kaj Uzantoj, asweigart kaj Dokumentoj ĉiuj rilatas al dosierujojn (ankaŭ nomita dosierujoj). Dosierujoj povas enhavi dosierojn kaj aliaj dosierujoj. Ekzemple, project.docx estas en la Dokumentoj dosierujo, kiu estas interne la asweigart dosierujo, kiu estas interne de la Uzantoj dosierujo. Figuro 8-1 montras ĉi dosierujo organizo.
Figuro 8-1. Dosiero en hierarkio de dosierujoj
La C: \ parto de la vojo estas la radika dosierujo, kiu enhavas ĉiuj aliaj dosierujoj. En Windows, la bazdosierujo estas nomita C: \ kaj ankaŭ estas nomita la C: stirado. Sur OS X kaj Linukso, la bazdosierujo estas /. En ĉi tiu libro, mi estos uzanta la Vindozo-stilo radika dosierujo, C: \. Se vi enigas la interaga ŝelo ekzemploj sur OS X aŭ Linukso, eniri
/
anstataŭe.
Pliaj volumoj, kiel DVD aŭ USB dikfingro drive, aperos malsame en malsamaj mastrumaj sistemoj. En Windows, ili aperos kiel nova, skribu radiko diskoj, kiel D: \ aŭ E: \. Sur OS X, ili aperas kiel novaj dosierujoj sub la / Volumoj dosierujo. Sur Linukso, ili aperos kiel nova dosierujojn sub la / mnt ( "monto") dosierujo.
Ankaŭ notu ke dum dosierujo nomoj kaj dosiernomoj ne usklecodistinga
sur Fenestroj kaj OS X, ili estas usklecodistinga sur Linukso.
Backslash sur Windows kaj Antaŭen Slash sur OS X kaj Linukso
En Vindozo, vojoj estas skribitaj uzante deklivaj streketoj (\) kiel la apartigilon inter dosierujo nomoj. OS X kaj Linukso, tamen, uzas la antaŭen oblikvo (/) kiel ilia vojo separador. Se vi volas vian programojn por labori sur ĉiuj mastrumaj sistemoj, vi devos skribi vian Python skriptoj manipuli ambaŭ kazoj.
Feliĉe, ĉi tiu estas simpla fari kun la
os.path.join()
funkcio. Se vi pasas ĝi la kordo valoroj de individua dosiero kaj dosierujo nomoj en via vojo, os.path.join()
revenos ŝnuro kun dosiero vojon uzante la ĝusta vojo apartigiloj. Eniri la sekva en la interaga konko: >>> Import os >>> Os.path.join ( 'usr', 'bin', 'spamado') 'Usr \\ bin \\ spamado'
Mi kuras ĉi tiujn interagajn ŝelo ekzemploj en Windows, tiel
os.path.join('usr', 'bin', 'spam')
revenis 'usr\\bin\\spam'
.
(Rimarku ke la deklivaj streketoj estas duobliĝis ĉar ĉiu backslash
bezonoj esti eskapinta de alia backslash karaktero.) Se mi vokus tiun
funkcion sur OS X aŭ Linukso, la ĉeno estus 'usr/bin/spam'
.
La os.path.join () funkcio estas helpema se vi bezonas krei fadenojn por dosiernomoj. Tiuj kordoj estos pasis al pluraj de la dosiero-rilataj funkcioj enkondukitaj en ĉi tiu ĉapitro. Ekzemple, jena ekzemplo kunigas nomojn el listo de dosiernomoj al la fino de dosierujo nomo:
>>> MyFiles = [ 'accounts.txt', 'details.csv', 'invite.docx'] >>> Por dosiernomo en myFiles: print (os.path.join ( 'C: \\ Uzantoj \\ asweigart', dosiernomo)) C: \ Uzantoj \ asweigart \ accounts.txt C: \ Uzantoj \ asweigart \ details.csv C: \ Uzantoj \ asweigart \ invite.docx
La Nuna Laborante Gvidlibro
Ĉiu programo kiu kuras en via komputilo havas nun laboras dosierujo, aŭ cwd. Ajna dosiernomoj aŭ vojoj kiuj ne komencas kun la bazdosierujo estas supozitaj esti sub la nuna labordosierujon. Vi povas akiri la aktualan laboras dosierujo kiel kordo valoro kun la
os.getcwd()
funkcio kaj ŝanĝi ĝin per os.chdir()
. Eniri la sekva en la interaga konko: >>> Import os >>> Os.getcwd () 'C: \\ Python34' >>> Os.chdir ( 'C: \\ Windows \\ system32') >>> Os.getcwd () 'C: \\ Windows \\ system32'
Tie, la nuna labordosierujon enkadriĝas al C: \ Python34, do la dosiernomo project.docx rilatas al C: \ Python34 \ project.docx. Kiam ni ŝanĝas la nuna laboranta dosierujo C: \ Windows, project.docx interpretas kiel C: \ Windows \ project.docx.
Python vidigas eraro se oni provas ŝanĝi al dosierujo kiu ne ekzistas.
>>> Os.chdir ( 'C: \\ ThisFolderDoesNotExist') Traceback (plej lasta alvoko lasta): Dosiero "<pyshell # 18>", linio 1, en <modulo> os.chdir ( 'C: \\ ThisFolderDoesNotExist') FileNotFoundError: [WinError 2] La sistemo ne povas trovi la dosieron: 'C: \\ ThisFolderDoesNotExist'
noto
Dum leterujo estas la pli moderna nomo por dosierujo, rimarki ke nun laboras dosierujo (aŭ simple labori dosierujo) estas la norma esprimo, ne nuna laborista dosierujo.
Absoluta vs. Relativa Paths
Ekzistas du manieroj por specifi dosiero vojon.
- Absolutan padon, kiu ĉiam komencas kun la bazdosierujo
- Parenco padon, kiu estas relativa al la programo aktuala labordosierujon
Ekzistas ankaŭ la punkto (
.
) Kaj punkto-punkto ( ..
) dosierujoj. Tiuj ne estas veraj dosierujojn sed specialaj nomoj kiuj povas esti uzitaj sur la vojeto.
Sola periodo ( "punkto") por dosierujo nomo estas stenografio por "tiu
dosierujo." Du periodoj ( "punkto-punkto") signifas "la patran
dosierujon."
Figuro 8-2 estas ekzemplo de iuj dosierujoj kaj dosieroj. Kiam la nuna laboranta dosierujo enkadriĝas al C: \ lardo, la relativa vojojn por la aliaj dosierujoj kaj dosieroj estas fiksita kiel ili estas en la figuro.
Figuro 8-2. La relativa vojojn por dosierujoj kaj dosieroj en la laboranta dosierujo C: \ lardo
La. \ Ĉe la komenco de relativa vojo estas laŭvola. Ekzemple,. \ Spam.txt kaj spam.txt rilati al la sama dosiero.
Kreado Nova Dosierujoj kun os.makedirs ()
Viaj programoj povas krei novajn dosierujojn (dosierujoj) kun la
os.makedirs()
funkcio. Eniri la sekva en la interaga konko: >>> Import os >>> Os.makedirs ( 'C: \\ bongustega \\ juglando \\ waffles)
Tio kreos ne nur la C: \ bongustega dosierujo sed ankaŭ juglando dosierujo ene C: \ bongusta kaj waffles dosierujo ene C: \ bongustega \ juglando. Te
os.makedirs()
kreos ajnan necesan intera dosierujoj por certigi ke la plenan padon ekzistas. Figuro 8-3 montras ĉi hierarkio de dosierujoj.
Figuro 8-3. La rezulto de
os.makedirs('C:\\delicious \\walnut\\waffles')
La os.path Modulo
La
os.path
modulo enhavas multajn helpema funkcioj rilataj al dosiernomoj kaj dosiero vojojn. Ekzemple, vi jam uzata os.path.join()
konstrui vojojn en maniero kiu funkcios en ajna mastruma sistemo. Ekde os.path
estas modulo ene la os
modulo, vi povas importi ĝin per simple kurante import os
.
Kiam via programoj bezonas labori kun dosieroj, dosierujoj, aŭ dosieron
vojoj, vi povas referi al la mallongaj ekzemploj en ĉi tiu sekcio. La kompleta dokumentaro por la os.path
modulo estas sur la Python retejo ĉe http://docs.python.org/3/library/os.path.html . noto
Plejparto de la ekzemploj kiuj sekvas en ĉi tiu sekcio postulos la
os
modulo, tiel memoras por importi ĝin komence de ajna skripto vi skribi kaj iam vi restartigu sencela. Alie vi ricevos NameError: name 'os' is not defined
erarmesaĝon. Uzado Absoluta kaj Relativa Paths
La
os.path
modjulo provizas por reveni la absolutan padon de relativa vojo kaj por kontrolanta ĉu donita vojo estas absoluta pado. - Nomante
os.path.abspath(
path
)
revenos kordo de la absoluta vojo de la argumento. Tio estas facila maniero por konverti relativa vojo enen absoluta. - Nomante
os.path.isabs(
path
)
revenosTrue
se la argumento estas absoluta vojo kajFalse
se ĝi estas relativa vojo. - Nomante
os.path.relpath(
path, start
)
revenos kordo de relativa vojo de lastart
padon alpath
. Sestart
ne provizita, la nuna laboro dosierujo estas uzita kiel la komenco vojon.
Provu ĉi tiujn funkciojn en la interaga konko:
>>> Os.path.abspath ( '.') 'C: \\ Python34' >>> Os.path.abspath ( '. \\ Skriptoj') 'C: \\ Python34 \\ Skriptoj' >>> Os.path.isabs ( '.') falsa >>> Os.path.isabs (os.path.abspath ( '.')) veraj
Ekde C: \ Python34 estis la laboranta dosierujo kiam
os.path.abspath()
nomiĝis la "unu-punkta" dosierujo reprezentas la absolutan padon 'C:\\Python34'
. noto
Ekde
via sistemo probable havas malsamajn dosierojn kaj tekojn sur gxin ol
miaj, vi ne povos sekvi ĉiun ekzemplo en ĉi ĉapitro ĝuste. Ankoraŭ, provu sekvi kune uzante dosierujoj kiuj ekzistas en via komputilo.
Entajpu la jenaj alvokoj al
os.path.relpath()
en la interaga konko: >>> Os.path.relpath ( 'C: \\ Windows', 'C: \\') 'Windows' >>> Os.path.relpath ( 'C: \\ Windows', 'C: \\ spamado \\ ovojn') '.. \\ .. \\ Vindozo' >>> Os.getcwd () 'C: \\ Python34'
Nomante
os.path.dirname(
path
)
revenos ŝnuro de ĉiu kiu venas antaŭ la lasta oblikvo en la path
argumento. Nomante os.path.basename(
path
)
revenos ŝnuro de ĉiu kiu venas post la fina oblikvo en la path
argumento. La dir nomo kaj bazo nomo de pado estas skizita en Figuro 8-4 .
Figuro 8-4. La bazo nomo sekvas la lasta oblikvo en pado kaj estas la sama kiel la dosiernomo. La dir nomo estas ĉio antaŭ la fina oblikvo.
Ekzemple, tajpu la sekvajn en la interaga konko:
>>> Vojo = 'C: \\ Windows \\ system32 \\ calc.exe' >>> Os.path.basename (vojo) 'Calc.exe' >>> Os.path.dirname (vojo) 'C: \\ Windows \\ system32'
Se vi bezonas vojeton la dir nomo kaj bazo nomon kune, vi povas simple nomi
os.path.split()
por ricevi opo valoro kun tiuj du kordoj, kiel tia: >>> CalcFilePath = 'C: \\ Windows \\ system32 \\ calc.exe' >>> Os.path.split (calcFilePath) ( 'C: \\ Windows \\ system32', 'calc.exe')
Rimarku ke vi povas krei la saman opo nomante
os.path.dirname()
kaj os.path.basename()
kaj metante sian revenon valoroj en opo. >>> (Os.path.dirname (calcFilePath), os.path.basename (calcFilePath)) ( 'C: \\ Windows \\ system32', 'calc.exe')
Sed
os.path.split()
estas bela ŝparvojo se vi bezonas ambaŭ valoroj.
Ankaŭ notu ke
os.path.split()
ne prenas dosiero padon kaj resendas liston de ĉenoj de ĉiu dosierujo. Por ke, uzi la split()
kordoj metodo kaj disigo de la ŝnuro en os.sep
. Memoras de antaŭaj ke la os.sep
variablo enkadriĝas la ĝusta dosierujo-disigante oblikvo por la komputilo rulas la programon.
Ekzemple, tajpu la sekvajn en la interaga konko:
>>> CalcFilePath.split (os.path.sep) [C: ',' Windows ',' system32 ',' calc.exe ']
Sur OS X kaj Linukso sistemoj, estos malplenan ĉenon ĉe la komenco de la revenis listo:
>>> '/usr/bin'.split(os.path.sep) [ '', 'Usr', 'bin']
La
split()
kordoj metodo laboros reveni listo de ĉiu parto de la vojo. Ĝi funkcios en ajna mastruma sistemo se vi pasas ĝi os.path.sep
. Trovante Dosiero Grandecoj kaj Leterujo Enhavo
Unufoje vi havas manierojn de uzado dosiero vojoj, vi tiam povas
komenci kolektanta informon pri specifa dosierojn kaj dosierujojn. La
os.path
modjulo provizas por trovanta la grandeco de dosiero en bajtoj kaj la dosierojn kaj dosierujojn ene donita dosierujo. - Nomante
os.path.getsize(
path
)
redonos la grandeco en bajtoj de la dosiero en lapath
argumento. - Nomante
os.listdir(
path
)
revenos listo de dosiernomo kordoj por ĉiu dosiero en lapath
argumento. (Notu ke ĉi tiu funkcio estas en laos
modulo, neos.path
.)
Jen kion mi akiras kiam mi provas tiujn funkciojn en la interaga konko:
>>> Os.path.getsize ( 'C: \\ Windows \\ system32 \\ calc.exe') 776192 >>> Os.listdir ( 'C: \\ Windows \\ system32') [ '0409', '12520437.cpx', '12520850.cpx', '5U877.ax', 'aaclient.dll', - Snip - 'Xwtpdui.dll', 'xwtpw32.dll', 'zh-CN', 'zh-HK', 'zh-TW', 'zipfldr.dll']
Kiel vi povas vidi, la calc.exe programo sur mia komputilo estas 776.192 bajtoj en grandeco, kaj mi havas multajn dosierojn en C: \ Windows \ system32. Se mi volas trovi la tutan grandecon de ĉiuj dosieroj en tiu dosierujo, mi povas uzi
os.path.getsize()
kaj os.listdir()
kune. >>> TotalSize = 0 >>> Por dosiernomo en os.listdir ( 'C: \\ Windows \\ system32'): totalSize = totalSize + os.path.getsize (os.path.join ( 'C: \\ Windows \\ system32', dosiernomo)) >>> Print (totalSize) 1117846456
Kiel mi buklo super ĉiu dosiernomo en la C: \ Windows \ system32 dosierujo, la
totalSize
variablo estas incremented de la grandeco de ĉiu dosiero. Rimarku kiel kiam mi vokas os.path.getsize()
, mi uzas os.path.join()
al ligi la dosierujo nomon kun la nuna dosiernomo. La entjeraj kiuj os.path.getsize()
redonas aldonas al la valoro de totalSize
. Post looping tra ĉiuj dosieroj, mi presi totalSize
vidi la tutan grandecon de la C: \ Windows \ system32 dosierujo. Kontrolanta Path Valideco
Multaj Python funkcioj frakasos per eraro se vi provizi ilin per vojo, kiu ne ekzistas. La
os.path
modjulo provizas kontroli ĉu donita vojo ekzistas kaj ĉu ĝi estas dosiero aŭ dosierujo. - Nomante
os.path.exists(
path
)
revenosTrue
se la dosiero aŭ dosierujo menciita en la argumento ekzistas kaj revenosFalse
se ĝi ne ekzistas. - Nomante
os.path.isfile(
path
)
revenosTrue
se la vojo argumento ekzistas kaj dosiero kaj revenosFalse
alie. - Nomante
os.path.isdir(
path
)
revenosTrue
se la vojo argumento ekzistas kaj estas dosierujo kaj revenosFalse
alie.
Jen kion mi akiras kiam mi provas tiujn funkciojn en la interaga konko:
>>> Os.path.exists ( 'C: \\ Vindozo) veraj >>> Os.path.exists ( 'C: \\ some_made_up_folder') falsa >>> Os.path.isdir ( 'C: \\ Windows \\ system32') veraj >>> Os.path.isfile ( 'C: \\ Windows \\ system32') falsa >>> Os.path.isdir ( 'C: \\ Windows \\ system32 \\ calc.exe') falsa >>> Os.path.isfile ( 'C: \\ Windows \\ system32 \\ calc.exe') veraj
Vi povas determini ĉu ekzistas DVD aŭ flash drive aktuale konektita al la komputilo de kontrolanta por gxi plej
os.path.exists()
funkcio. Ekzemple, se mi volis kontroli por flash drive kun la volumo nomita D: \ sur mia Vindozo komputilo, mi povus fari tion kun la sekvaj: >>> Os.path.exists ( 'D: \\') falsa
Oops! Ĝi aspektas kiel mi forgesis konekti mian flash drive.
La Arkivo Legado / Skribo Procezo
Unufoje vi estas komforta laborante kun dosierujoj kaj relativa vojoj,
vi povos entajpi la lokon de dosieroj por legi kaj skribi. La funkcioj kovrita en la sekvaj sekcioj aplikos al teksto dosierojn. Kompleta teksto dosierojn enhavas nur baza teksto karakteroj kaj ne inkludas tiparo, grandeco, aŭ koloro informojn. Teksto dosierojn kun la .txt etendo aŭ Python script dosierojn kun la .py etendo estas ekzemploj de teksto dosierojn. Tiuj povas esti malfermita kun Windows la Notepad aŭ OS X TextEdit apliko. Viaj programoj povas facile legi la enhavon de teksto dosierojn kaj trakti ilin kiel ordinara ĉeno valoro.
Duumaj dosieroj estas ĉiuj aliaj dosiertipoj, kiel tekstoprilaborado dokumentoj, PDFs, bildoj, kalkultabelojn kaj plenumeblaj programoj. Se vi malfermas duuma dosiero en Notepad aŭ TextEdit, ĝi similos grimpis sensencaĵo, kiel en Figuro 8-5 .
Figuro 8-5. La Windows
calc.exe
programo malfermita en Notepad
Ekde ĉiu malsama tipo de duuma dosiero devas esti manipulita en lia
propra maniero, ĉi libro ne volas iri en legado kaj skribado kruda
binarajn dosierojn rekte. Feliĉe, multaj moduloj fari laborante kun binarajn dosierojn facila-vi esploros unu el ili, la
shelve
modulo, poste en tiu ĉapitro.
Ekzistas tri ŝtupoj al legado aŭ skribado dosieroj en Python.
- Voku la
open()
funkcio redonasFile
objekto. - Voku la
read()
aŭwrite()
metodon sur laFile
objekto. - Fermi la dosieron per nomante la
close()
metodon sur laFile
objekto.
Malfermante Dosieroj kun la malfermita () Funkcio
Malfermi dosieron kun la
open()
funkcio, sekvinberoj ĝi ŝnureto vojo indikante la dosieron vi volas malfermi; ĝi povas esti aŭ absoluta aŭ relativa vojo. La open()
funkcio redonas File
objekto.
Provu kreante tekstdosiero nomita hello.txt uzante Notepad aŭ TextEdit. Tajpu
Hello world!
Kiel la enhavo de ĉi tekstdosiero savi ĝin en vian uzanto hejmo dosierujo. Tiam, se vi uzas Windows, tajpu la sekvajn en la interaga konko: >>> HelloFile = malfermita ( 'C: \\ Uzantoj \\ your_home_folder \\ hello.txt')
Se vi uzas OS X, eniri la sekva en la interaga ŝelo anstataŭ:
>>> HelloFile = malfermita ( '/ Uzantoj / your_home_folder /hello.txt')
Certiĝu anstataŭi
your_home_folder
kun via komputilo uzantnomon. Ekzemple, mia salutnomo estas asweigart, tial mi eniros 'C:\\Users\\asweigart\\ hello.txt'
en Windows.
Ambaŭ tiuj komandoj malfermos la dosieron en 'leganta tekston "reĝimo, aŭ legi modon por mallonga. Kiam dosiero estas malfermita en legado mode, Python permesas nur legi datumojn de la dosiero; vi ne povas skribi aŭ modifi ĝin laŭ iu maniero. Legi modo estas la defaŭlta reĝimo por dosieroj vi malfermas en Python. Sed se vi ne volas dependi de Python defaŭltoj, vi povas eksplicite indiki la modon aprobante la kordoj valoro
'r'
kiel dua argumento por open()
. Tiel open('/Users/asweigart/ hello.txt', 'r')
kaj open('/Users/asweigart/hello.txt')
fari la samon.
La alvoko al
open()
redonas File
objekto. A File
objekto reprezentas dosieron en via komputilo; ĝi estas simple alia tipo de valoro en Python, tre kiel la listoj kaj vortaroj vi jam konas. En la antaŭa ekzemplo, vi stokitaj la File
objekto en la variablo helloFile
. Nun, kiam ajn vi volas legi de kaj skribi al la dosiero, vi povas fari tion per nomante metodoj sur la File
objekto en helloFile
. Legante la Enhavo de dosieroj
Nun ke vi havas
File
objekto, vi povas komenci legadon de ĝi. Se vi volas legi la tutan enhavon de dosiero kiel linio valoro, uzi la File
objekto read()
metodo. Ni daŭrigas kun la hello.txt File
objekto vi stokitaj en helloFile
. Eniri la sekva en la interaga konko: >>> HelloContent = helloFile.read () >>> helloContent 'Saluton mondo!'
Se vi pensas pri la enhavo de dosiero sola granda ĉeno valoro, la
read()
metodo revenas la kordo kiu estas stokita en la dosiero.
Alternative, vi povas uzi la
readlines()
metodo por ricevi liston de ŝnuro valoroj de la dosiero, unu cxeno por ĉiu linio de teksto. Ekzemple, krei dosieron nomita sonnet29.txt en la sama dosierujo kiel hello.txt kaj skribi la sekvan tekston en ĝin: Kiam, en malhonoro kun riĉaĵo kaj homaj okuloj, Mi tute sola beweep mia forpelito stato, Maltrankvileco surda cxielo per mia senbotaj krioj, Kaj rigardu min kaj malbeni miajn sorton,
Certiĝu disigi la kvar linioj kun linisaltojn. Tiam eniri la sekva en la interaga konko:
>>> SonnetFile = malfermita ( 'sonnet29.txt') >>> SonnetFile.readlines () [Kiam, en malhonoro kun riĉaĵo kaj homaj okuloj, \ n ',' Mi tute sola beweep mia forpelito stato, \ n ', Kaj problemojn surda cxielo per mia senbotaj ploras, \ n', Kaj rigardi min kaj malbeni miajn sorto, ']
Rimarku ke ĉiu de la kordo valoroj finiĝas per lino karaktero,
\n
, krom la lasta linio de la dosiero. Listo de kordoj estas ofte pli simpla al laboro kun pli ol sola granda ĉeno valoro. Skribante al dosieroj
Python permesas skribi enhavon al dosiero en maniero simila al kiel la
print()
funkcio "skribas" kordoj al la ekrano. Vi ne povas skribi al dosiero vi malfermis en legado mode, tamen. Anstataŭe, vi devas malfermi ĝin en "skribi tekston" modo aŭ "postglui tekston" reĝimo, aŭ skribu mode kaj append reĝimo por mallonga.
Skribi reĝimo anstataŭigos la ekzistantan dosieron kaj komenci de nulo,
same kiel kiam vi anstatauxigas ŝanĝiĝema valoro kun nova valoro. Pasi
'w'
kiel la dua argumento al open()
malfermi la dosieron en registran modo. Append reĝimo, aliflanke, estos postglui tekston al la fino de la ekzistanta dosiero. Vi povas pensi pri tio kiel almuntanta al listo en variablo, prefere ol superskribi la variablo entute. Pass 'a'
kiel la dua argumento al open()
malfermi la dosieron en append reĝimo.
Se la dosiernomo pasis al
open()
ne ekzistas, ambaŭ skribi kaj append reĝimo kreos novan, malplenan dosieron. Post legi aŭ skribi dosieron, invitu close()
metodon antaŭ malfermi la dosieron denove.
Ni metu tiujn konceptojn kune. Eniri la sekva en la interaga konko:
>>> BaconFile = malfermita ( 'bacon.txt', 'w') >>> BaconFile.write ( 'Saluton mondo! \ N') 13 >>> BaconFile.close () >>> BaconFile = malfermita ( 'bacon.txt', 'a') >>> BaconFile.write ( 'Bacon ne estas legomo.') 25 >>> BaconFile.close () >>> BaconFile = malfermita ( 'bacon.txt') >>> Enhavo = baconFile.read () >>> BaconFile.close () >>> Print (enhavo) Saluton mondo! Lardo ne estas legomo.
Unue, ni malfermu bacon.txt en registran modo. Ĉar ne ekzistas bacon.txt tamen, Pitono kreas. Nomante
write()
sur la malfermita dosiero kaj pasante write()
la ŝnuro argumento 'Hello world! /n'
'Hello world! /n'
skribas la ŝnuro al la dosiero kaj redonas la nombron de karakteroj skribitaj, inkluzive de la lino. Tiam ni fermas la dosiero.
Aldoni tekston al la ekzistantaj enhavon de la dosiero anstataŭ
anstataŭigi la kordo ni ĵus skribis, ni malfermu la dosieron en append
reĝimo. Ni skribas
'Bacon is not a vegetable.'
Al la dosiero kaj fermi ĝin. Fine, presi la dosieron enhavon al la ekrano, ni malfermu la dosieron en ĝia defaŭlta legi modon, nomita read()
, stoki la rezultan File
objekto en content
, fermi la dosieron, kaj presita content
.
Notu ke la
write()
metodo ne aŭtomate aldonas novan linion karakteron al la fino de la ĉeno kiel la print()
funkcio faras. Vi devos aldoni tiun karakteron mem. Ŝparante Variabloj kun la shelve Modulo
Vi povas savi variablojn en via Python programoj al duuma breto dosierojn uzante la
shelve
modulo. Tiel, via programo povas restaŭri datumojn al variabloj de la malmola disko. La shelve
modulo lasos vin aldoni Konservi kaj Open karakterizaĵoj al via programo.
Ekzemple, se vi kuris de programo kaj eniris iun agordadaj difinoj, vi
povus savi tiujn agordojn al breto dosieron kaj do la programo ŝarĝas
ilin la venontan fojon ĝi kuras.
Eniri la sekva en la interaga konko:
>>> Import shelve >>> ShelfFile = shelve.open ( 'mydata') >>> Katoj = [ 'Zophie', 'Pooka', 'Simon'] >>> ShelfFile [ 'katoj'] = katoj >>> ShelfFile.close ()
Legi kaj skribi datumojn uzante la
shelve
modulo, vi unue importado shelve
. Voku shelve.open()
kaj fordoni la dosiernomo, kaj tiam stoki la reiris breto valoron en variablo. Vi povas fari ŝanĝojn al la breto valoro kvazaŭ vortaro. Kiam vi faris, voki close()
sur la breto valoro. Tie, nia breto valoro estas stokita en shelfFile
. Ni krei liston cats
kaj skribi shelfFile['cats'] = cats
stoki la listo en shelfFile
kiel valoro asociita kun la ŝlosilo 'cats'
(kiel en vortaro). Tiam ni nomas close()
sur shelfFile
.
Post kuri la antaŭa kodo en Windows, vi vidos tri novajn dosierojn en la nuna labordosierujon: mydata.bak, mydata.dat kaj mydata.dir. Sur OS X, nur ununura mydata.db dosiero estos kreita.
Tiuj duumaj dosieroj enhavas la datumojn vi stokitaj en via breto. La formato de tiuj binarajn dosierojn ne gravas; Vi nur bezonas scii kion la
shelve
modulo faras, ne kiel ĝi faras ĝin. La modulo liberigas vin de zorgi pri kiel memori via programo datumojn al dosiero.
Viaj programoj povas uzi la
shelve
modulo por poste remalfermi kaj rekuperi la datumojn de tiuj breto dosierojn. Breto valoroj ne devas esti malfermita en legado aŭ skribu mode-ili povas fari ambaŭ samtempe malfermiĝis. Eniri la sekva en la interaga konko: >>> ShelfFile = shelve.open ( 'mydata') >>> Tipo (shelfFile) <Klaso shelve.DbfilenameShelf '> >>> ShelfFile [ 'katoj'] [ 'Zophie', 'Pooka', 'Simon'] >>> ShelfFile.close ()
Tie, ni malfermas la breto dosierojn por kontroli ke nia datumo estis stokitaj korekte. Enirante
shelfFile['cats']
redonas la sama lerta kiu ni stokis pli frue, do ni scias, ke la listo estas ĝuste stokitaj, kaj ni vokos close()
.
Samkiel vortaroj, breto valoroj havas
keys()
kaj values()
metodoj ke revenos lerta similajn valorojn de la klavoj kaj valoroj en la breto. Ĉar tiuj metodoj reveni listo similajn valorojn anstataŭ vera listoj, vi devas pasi ilin al la list()
funkcio akiri ilin en lerta formo. Eniri la sekva en la interaga konko: >>> ShelfFile = shelve.open ( 'mydata') >>> Liston (shelfFile.keys ()) [ 'Katoj'] >>> Liston (shelfFile.values ()) [[ 'Zophie', 'Pooka', 'Simon']] >>> ShelfFile.close ()
Kompleta teksto estas utila por krei dosierojn kiujn vi legos en
tekstoredaktilo kiel Notepad aŭ TextEdit, sed se vi volas konservi la
datumojn de via Python programoj, uzi la
shelve
modulo. Ŝparante Variabloj kun la pprint.pformat () Funkcio
Revokon de Bela Printing ke la
pprint.pprint()
funkcio volo "bele presitaj" la enhavo de listo aŭ vortaro al la ekrano, dum la pprint.pformat()
funkcio estos redoni tiun saman tekston kiel linio anstataŭ videbligi ĝin. Ne nur estas ĉi ŝnuro formatita esti facile legi, sed ĝi estas ankaŭ sintakse ĝusta Python kodo. Diru vi havas vortaron stokitaj en variablo kaj vi volas konservi tiun variablo kaj ĝia enhavo por estonta uzo. Uzante pprint.pformat()
donas al vi ŝnuron ke vi povas skribi al .py dosieron. Dosiero estos via tre propra modulo vi povas importi whenever vi deziras uzi la variablo stokitaj en ĝi.
Ekzemple, tajpu la sekvajn en la interaga konko:
>>> Import pprint >>> Katoj = [{ 'nomo': 'Zophie', 'desc': 'dika'}, { 'nomo': 'Pooka', 'desc': 'lanuga'}] >>> Pprint.pformat (katoj) "[{ 'Desc': 'dika', 'nomo': 'Zophie'}, { 'desc': 'lanuga', 'nomo': 'Pooka'}]" >>> FileObj = malfermita ( 'myCats.py', 'w') >>> FileObj.write ( 'katoj =' + pprint.pformat (katoj) + '\ n') 83 >>> FileObj.close ()
Tie, ni importi
pprint
al ni uzu pprint.pformat()
. Ni havas liston de vortaroj, stokitaj en variablo cats
. Teni la liston en cats
disponebla eĉ post ni fermas la ŝelo, ni uzas pprint.pformat()
por redoni ĝin kiel linio. Fojo kiun havas la datumoj en cats
kiel linio, ĝi estas facile skribi la ŝnuro al dosiero, kiun ni nomas myCats.py.
La moduloj ke
import
deklaron importoj estas mem nur Python skriptoj. Kiam la ĉeno de pprint.pformat()
estas savita al .py dosieron, la dosiero estas modulo kiu povas esti importita ĝuste kiel ajna alia.
Kaj ekde Python skriptoj estas mem nur tekstdosieroj kun la .py dosiersufikso via Python programoj povas generi aliajn Python programoj. Vi povas tiam importi tiujn dosierojn en skriptoj.
>>> Import myCats >>> myCats.cats [{ 'Nomo': 'Zophie', 'desc': 'dika'}, { 'nomo': 'Pooka', 'desc': 'lanuga'}] >>> MyCats.cats [0] { 'Nomo': 'Zophie', 'desc': 'dika'} >>> MyCats.cats [0] [ 'nomo'] 'Zophie'
Profito de krei .py dosiero (kontraste al savanta variabloj kun la
shelve
modulo) estas ke ĉar ĝi estas teksta dosiero, la enhavo de la dosiero
povas esti legata kaj modifita per iu ajn kun simpla tekstoredaktilo. Por plej aplikoj tamen konservante datumojn uzante la shelve
modulo estas la preferata maniero savi variabloj al dosiero. Nur bazaj datumtipoj kiel entjeroj, flosas, kordoj, lertaj, kaj vortaroj povas esti skribita al dosiero kiel simpla teksto. File
objektoj, ekzemple, ne povas esti kodita kiel teksto. Projekto: Generating Hazarda Kvizo Dosieroj
Diru vi estas geografio instruisto kun 35 lernantoj en via klaso kaj vi volas doni popo kvizon en usona ŝtato ĉefurboj. Ve, via klaso havas kelkajn malbonajn ovojn en ĝin kaj vi ne povas fidi la studentoj ne trompi.
Vi ŝatus randomize la ordo de demandoj por ke ĉiu kvizo estas unika,
tial estas neeble ke iu bebolito respondojn de iu ajn alia. Kompreneble faras tion mane estus longa kaj enuiga afero. Feliĉe, komprenu iuj Python.
Jen kion la programo faras:
- Kreas 35 malsamajn kvizojn.
- Kreas 50 multoblaj-elektaj demandoj por ĉiu kvizo en hazarda ordo.
- Provizas la ĝustan respondon kaj tri hazarda malĝustajn respondojn por ĉiu demando, en hazarda ordo.
- Skribas la kvizojn al 35 tekstaj dosieroj.
- Skribas la respondon ŝlosiloj 35 tekstaj dosieroj.
Tio signifas la kodo devas fari la sekvajn:
- Stoki la ŝtatoj kaj iliaj ĉefurboj en vortaro.
- Nomas
open()
,write()
, kajclose()
por la kvizo kaj respondu ŝlosilo teksto dosierojn. - Uzu
random.shuffle()
randomize la ordo de la demandoj kaj multoblaj-elekto ebloj.
Paŝo 1: Stoki la Kvizo Datumoj en Vortaro
La unua paŝo estas krei skeleton skripto kaj plenigi ĝin per via kvizo datumoj. Krei dosieron nomita randomQuizGenerator.py kaj fari ĝin rigardi kiel la sekvaj:
#! python3 # RandomQuizGenerator.py - Kreas kvizojn kun demandoj kaj respondoj en # Hazarda ordo, kune kun la respondo ŝlosilo. ❶ importi hazarda # La kvizo datumoj. Klavoj estas statoj kaj valoroj estas iliaj ĉefurboj. ❷ ĉefurboj = { 'Alabamo': 'Montgomery', 'Alasko': 'Juneau', 'Arizono': 'Fenikso', 'Arkansaso': 'Little Rokenrolo', 'Kalifornio': 'Sakramento', 'Ruĝa': 'Denvero', 'Konektikuto': 'Hartford', 'Delavaro': 'Dovero', 'Florido': 'Tallahassee', 'Kartvelio': 'Atlanta', 'Havajo': 'Honolulu', 'Idaho': 'Boise', 'Ilinojo': 'Springfield', 'Indiana': 'Indianapolis', 'Iowa': 'Des Moines', 'Kansaso': 'Topeka', 'Kentukio': 'Frankfort', 'Luiziano': 'Baton Rouge', 'Majno': 'Augusta', 'Marilando': 'Annapolis', 'Masaĉuseco': 'Bostono', 'Miĉigano': 'Lansing', 'Minesoto': 'Sankta Paŭlo', 'Misisipio': 'Jackson,' Misurio ': 'Jefferson City', 'Montano': 'Helena', 'Nebrasko': 'Lincoln', 'Neĝado': 'Carson City', 'New Hampshire': 'Konkordo', 'Nova Ĵerzo': 'Trenton', 'Nova Meksiko: 'Sanktan Fidon', 'Novjorko': 'Albany', 'Norda Karolino': 'Raleigh', 'Norda Dakoto': 'Bismarck', 'Ohio': 'Kolumbo', 'Oklahomo': 'Oklahoma City', 'Oregono': 'Salem', 'Pensilvanio': 'Harrisburg', 'Rhode Island': 'Providenco', South Carolina ':' Columbia ',' Suda Dakoto ':' Pierre ',' Tenesio ': 'Naŝvilo', 'Teksaso': 'Austin: Utaho': 'Sallagurbo', 'Vermonto': 'Montpelier', 'Virginio': 'Richmond', 'Vaŝingtono': 'Olympia' 'Okcidento Virginia ':' Charleston ',' Viskonsino ':' Madison ',' Vajomingo ':' Cheyenne '} # Kreu 35 kvizo dosierojn. ❸ por quizNum en gamo (35): # TODO: Krei la kvizo kaj respondu ŝlosilo dosierojn. # TODO: Skribu la kaplinio por la kvizo. # TODO: Shuffle la ordon de la ŝtatoj. # TODO: Loop tra ĉiuj 50 ŝtatoj, igante demandon por ĉiu.
Ekde tiu programo estos hazarde ordigi la demandojn kaj respondojn, vi devas importi la
random
modulo ❶ uzi liajn funkciojn. La capitals
variablo ❷ enhavas vortaro kun usonaj ŝtatoj kiel ŝlosilojn kaj iliaj ĉefurboj kiel valoroj. Kaj kiam vi volas krei 35 kvizoj, la kodo kiu vere generas la kvizo kaj respondu ŝlosilo dosieroj (markitaj kun TODO
komento ĝis nun) iros ene for
ciklo, kiu cikloj 35 fojojn ❸. (Ĉi tiu nombro povas esti ŝanĝita por produkti ajnan numeron de kvizo dosierojn.) Paŝo 2: Krei la Kvizo Arkivo kaj Shuffle la Demando Ordo
Nun estas tempo por komenci plenigante en tiuj
TODO
s.
La kodo en la buklo estos ripetita 35 fojojn-unufoje por ĉiu kvizo-do vi devas zorgi pri nur unu kvizo samtempe ene la buklo. Unue vi devos krei la fakta kvizo dosiero.
Ĝi bezonas havi unikan dosiernomon kaj ankaŭ devus havi iun specon de
normo kaplinio en gxi, kun lokoj por la lernanto entajpu nomon, dato kaj
klaso periodo.
Tiam vi bezonos akiri liston de ŝtatoj en hazardigitaj ordon, kiu povas
esti uzita poste por krei demandojn kaj respondojn por la kvizo.
Aldonu la sekvajn liniojn de kodo por randomQuizGenerator.py:
#! python3 # RandomQuizGenerator.py - Kreas kvizojn kun demandoj kaj respondoj en # Hazarda ordo, kune kun la respondo ŝlosilo. - Snip - # Kreu 35 kvizo dosierojn. por quizNum en gamo (35): # Krei la kvizo kaj respondu ŝlosilo dosierojn. ❶ quizFile = malfermita ( 'capitalsquiz% s.txt'% (quizNum + 1), 'w') ❷ answerKeyFile = malfermita ( 'capitalsquiz_answers% s.txt'% (quizNum + 1) , 'w') # Skribu la kaplinio por la kvizo. ❸ quizFile.write ( 'Nomo \ n \ nDate: \ n \ nPeriod: \ n \ n') quizFile.write (( '' * 20) + 'ŝtato Ĉefurboj Kvizo (Formo % s) '% (quizNum + 1)) quizFile.write (' \ n \ n ') # Shuffle la ordon de la ŝtatoj. Statojn = listo (capitals.keys ()) ❹ random.shuffle (ŝtatoj) # TODO: Loop tra ĉiuj 50 ŝtatoj, igante demandon por ĉiu.
La dosiernomojn por la kvizojn estos capitalsquiz <N> .txt , kie <N> estas unika nombro por la kvizo kiu venas de
quizNum
la for
buklo la vendotablo. La respondo ŝlosilo por capitalsquiz <N> .txt estos stokitaj en teksta dosiero nomita capitalsquiz_answers <N> .txt . Ĉiufoje tra la ciklo, la %s
lokokupilo en 'capitalsquiz%s.txt'
kaj 'capitalsquiz_answers%s.txt'
estos anstataŭita de (quizNum + 1)
, tiel la unua kvizo kaj respondo ŝlosilo kreita estos capitalsquiz1.txt kaj capitalsquiz_answers1.txt . Tiuj dosieroj estos kreita per alvokoj al la open()
funkcio je ❶ kaj ❷, kun 'w'
kiel la dua argumento malfermi ilin skribe.
La
write()
deklaroj ĉe ❸ krei kvizon kaplinio por la studento por plenigi. Fine, randomigitaj listo de usonaj ŝtatoj estas kreitaj kun la helpo de la random.shuffle()
funkcio ❹, kiu hazarde reorders la valorojn en ajna lerta kiu trapasas ĝin.Paŝo 3: Krei la Respondo Opcioj
Nun vi devas generi la respondon opcioj por ĉiu demando, kiu estos multnombraj elekto de A al D. Vi devas krei alian
for
buklo-ĉi por generi enhavon por ĉiu el la 50 demandoj sur la kvizo. Tiam estos tria for
ciklo nestitaj ene generi la multoblaj-elekto opcioj por ĉiu demando. Fari vian kodo aspektas kiel la sekvaj:#! python3 # RandomQuizGenerator.py - Kreas kvizojn kun demandoj kaj respondoj en # Hazarda ordo, kune kun la respondo ŝlosilo. - Snip - # Loop tra ĉiuj 50 ŝtatoj, igante demandon por ĉiu. Por questionNum en gamo (50): # Akiri dekstra kaj malĝustajn respondojn. ❶ correctAnswer = ĉefurboj [ŝtatoj [questionNum]] ❷ wrongAnswers = listo (capitals.values ()) ❸ del wrongAnswers [wrongAnswers.index (correctAnswer)] ❹ wrongAnswers = random.sample (wrongAnswers, 3) ❺ answerOptions = wrongAnswers + [correctAnswer] ❻ random.shuffle (answerOptions) # TODO: Skribu la demando kaj respondo ebloj al la kvizo dosiero. # TODO: Skribu la respondo ŝlosilo al dosiero.
La ĝusta respondo estas facile akiri-ĝi estas stokita kiel valoro en la
capitals
vortaro ❶. Ĉi buklo volo buklo tra la statojn en la barajan states
listo, de states[0]
al states[49]
, trovi ĉiu ŝtato capitals
, kaj stoki ke ŝtato responda ĉefurbo correctAnswer
.
La listo de eblaj erara respondoj estas pli delikata. Vi povas akiri ĝin per duobligante ĉiuj la valoroj en la
capitals
vortaro ❷, viŝante la korekta respondo ❸ kaj elektante tri hazarda valoroj de tiu listo ❹. La random.sample()
funkcio faciligas tion selektado. Lia unua argumento estas la listo vi volas elekti de; la dua argumento estas la nombro de valoroj vi volas elekti. La plena listo de respondo ebloj estas la kombino de tiuj tri malĝustajn respondojn kun la korekta respondojn ❺. Fine, la respondoj devas esti randomigitaj ❻ tiel ke la ĝusta respondo estas ne ĉiam elekto D.Paŝo 4: Skribu Content la Kvizo kaj Respondu Ŝlosilo Dosieroj
Ĉiu kio restas estas skribi la demandon al la kvizo dosiero kaj la respondo al la respondo ŝlosilo dosiero. Fari vian kodo aspektas kiel la sekvaj:
#! python3 # RandomQuizGenerator.py - Kreas kvizojn kun demandoj kaj respondoj en # Hazarda ordo, kune kun la respondo ŝlosilo. - Snip - # Loop tra ĉiuj 50 ŝtatoj, igante demandon por ĉiu. por questionNum en gamo (50): - Snip - # Skribu la demando kaj la respondo ebloj al la kvizo dosiero. QuizFile.write ( '% s. Kio estas la ĉefurbo de% s? \ N'% (questionNum + 1, ŝtatoj [questionNum])) ❶ por i en gamo ( 4): ❷ quizFile.write ( '% s.% s \ n'% ( 'ABCD' [i], answerOptions [i])) quizFile.write ( '\ n') # Skribu respondo ŝlosilo al dosiero. ❸ answerKeyFile.write ( '% s.% S \ n'% (questionNum + 1: ABCD '[ answerOptions.index (correctAnswer)])) quizFile.close () answerKeyFile.close ()
A
for
banto kiu iras tra entjeroj 0
al 3
skribos la respondon ebloj en la answerOptions
listo ❶. La esprimo 'ABCD'[i]
en ❷ traktas la ŝnuro 'ABCD'
tiel tablo kaj taksos al 'A'
, 'B'
, 'C'
kaj tiam 'D'
sur ĉiu respektiva ripeto tra la buklo.
En la fina linio ❸, la esprimo
answerOptions.index(correctAnswer)
trovos la entjeran indekson de la korekta respondo en la hazarde ordigita respondo ebloj, kaj 'ABCD'[answerOptions.index(correctAnswer)]
taksos la korekta respondo letero estu skribataj al la respondo ŝlosilo dosiero.
Post vi kuras la programo, jen kiel via capitalsquiz1.txt
dosiero aspektos, kvankam kompreneble via demandoj kaj respondo opcioj
povas esti malsama de tiuj montritaj tie, depende de la rezulto de via
random.shuffle()
alvokoj: nomo:
Dato:
periodo:
Ŝtataj Ĉefurboj Kvizo (Formo 1)
1. Kio estas la ĉefurbo de Okcidenta Virginio?
A. Hartford
B. Sankta Fido
C. Harrisburg
D. Charleston
2. Kio estas la ĉefurbo de Kolorado?
A. Raleigh
B. Harrisburg
C. Denvero
D. Lincoln
- Snip -
La respondaj capitalsquiz_answers1.txt tekstdosiero aspektos tiel ĉi:
1. D
2. C
3.
4. C
- Snip -
Projekto: Multiclipboard
Diru vi havas la enuiga tasko de plenigado multaj formoj retpaĝaj aŭ softvaro kun pluraj tekstoj kampoj. La tondujo savas vin el tajpi la saman tekston saciedad. Sed nur unu afero povas esti sur la tondujo samtempe. Se
vi havas plurajn malsamajn pecojn de teksto kiun vi devas kopii kaj
alglui, vi devas teni reliefigante kaj kopiante la saman kelkajn aferojn
denove kaj denove denove.
Vi povas skribi Python programo por konservi trako de multnombraj pecoj de teksto. Tiu "multiclipboard" nomos mcb.pyw (ekde "MCB" estas pli mallonga por tajpi ol "multiclipboard"). La .pyw etendo signifas ke Python ne montras Terminal fenestro kiam kuras ĉi programo. (Vidu Apendico B por pli da detaloj.)
La programo savos ĉiu peco de tondujo teksto sub ŝlosilvorto. Ekzemple, kiam vi kuros
py mcb.pyw save spam
, la nuna enhavo de la tondujo saviĝos per la ŝlosilvorto spamado . Tiu teksto povas poste esti ŝarĝita al la tondujo denove por kuri py mcb.pyw spam
. Kaj se la uzanto forgesas kion ŝlosilvortoj ili havas, ili povas kuri py mcb.pyw list
kopii liston de ĉiuj ŝlosilvortoj al la tondujo.
Jen kion la programo faras:
- La komandlinio argumento por la ŝlosilvorto estas markita.
- Se la argumento estas
save
, tiam la enhavo de la poŝo estas savitaj al la ŝlosilvorto. - Se la argumento estas
list
, tiam ĉiuj ŝlosilvortoj estas kopiitaj al la tondujo. - Alie, la teksto por la ŝlosilvorto estas kopiita al la tondujo.
Tio signifas la kodo devas fari la sekvajn:
- Legi la komandlinio argumentoj de
sys.argv
. - Legi kaj skribi al la tondujo.
- Savi kaj ŝarĝi al breto dosiero.
Se vi uzas Windows, vi povas facile kuri ĉi skripton de la Run ... fenestro kreante batch dosieron nomita mcb.bat kun la sekva enhavo:
@ Pyw.exe C: \ Python34 \ mcb.pyw% *
Paŝo 1: Komentoj kaj Breto Setup
Komencu farante skeleto skripto kun iuj komentoj kaj baza agordo. Fari vian kodo aspektas kiel la sekvaj:
#! python3 # Mcb.pyw - Savas kaj ŝarĝoj pecojn de teksto al la tondujo. ❶ # Uzado: py.exe mcb.pyw ŝpari <ŝlosilvorto> - Savas tondujo al ŝlosilvorto. # Py.exe mcb.pyw <ŝlosilvorto> - Ŝarĝojn Temo al interdeponejo. # Py.exe mcb.pyw listo - ŝarĝoj ĉiuj ŝlosilvortoj al interdeponejo. ❷ importado shelve, pyperclip, sys ❸ mcbShelf = shelve.open ( 'MCB) # TODO: Savu tondujo enhavon. # TODO: Listo ŝlosilvortoj kaj ŝarĝo enhavo. mcbShelf.close ()
Estas komuna praktiko meti ĝeneralan uzadon informo en komentoj ĉe la supro de la dosiero ❶. Se vi iam forgesas kiel kuri via skripto, vi povas ĉiam rigardi tiujn komentojn por memorigo. Tiam vi importi viajn modulojn ❷. Kopiado kaj interglui postulos la
pyperclip
modulo, kaj legante la komandlinio argumentoj postulos la sys
modulo. La shelve
modulo ankaŭ venas en oportuna: Kiam ajn la uzanto volas ŝpari nova peco de tondujo tekston, vi ŝparos al breto dosiero. Tiam, kiam la uzanto volas alglui la tekston al siaj tondujo, vi malfermos la breto dosieron kaj ŝarĝi ĝin en vian programon. La breto dosiero estos nomita kun la prefikso MCB ❸.Paŝo 2: Savu poŝo Content kun Temo
La
programo faras malsamajn aferojn depende ĉu la uzanto volas ŝpari
tekston al ŝlosilvorto, ŝarĝo teksto en la tondujo, aŭ listigi ĉiujn la
ekzistantaj ŝlosilvortoj. Ni traktu tiun unuan kazon. Fari vian kodo aspektas kiel la sekvaj:
#! python3 # Mcb.pyw - Savas kaj ŝarĝoj pecojn de teksto al la tondujo. - Snip - # Konservu tondujo enhavon. ❶ se len (sys.argv) == 3 kaj sys.argv [1] .lower () == 'savi': ❷ mcbShelf [sys.argv [2]] = pyperclip.paste () elif len (sys.argv) == 2: ❸ # TODO: Listo ŝlosilvortoj kaj ŝarĝo enhavo. mcbShelf.close ()
Se la unua komandlinio argumento (kiu ĉiam estos ĉe indekso
1
de la sys.argv
listo) estas 'save'
❶, la dua komandlinio argumento estas la ŝlosilvorto por la nuna enhavo de la tondujo. La ŝlosilvorto estos uzita kiel la ŝlosilo por mcbShelf
, kaj la valoro estos la teksto nuntempe en la tondujo ❷.
Se estas nur unu komandlinio argumento, vi supozos estas ĉu
'list'
aŭ ŝlosilvorto ŝarĝi enhavon sur la tondujo. Vi planas akcepti kodon poste. Nuntempe, nur metis TODO
komenton tie ❸.Paŝo 3: Listo Ŝlosilvortoj kaj Ŝarĝi a Temo de Enhavo
Fine,
ni apliki la du ceteraj kazoj: La uzanto volas ŝargi tondujo tekston de
ŝlosilvorto, aŭ ili volas liston de ĉiuj disponeblaj ŝlosilvortoj. Fari vian kodo aspektas kiel la sekvaj:
#! python3 # Mcb.pyw - Savas kaj ŝarĝoj pecojn de teksto al la tondujo. - Snip - # Konservu tondujo enhavon. se len (sys.argv) == 3 kaj sys.argv [1] .lower () == 'savi': mcbShelf [sys.argv [2]] = pyperclip.paste () elif len (sys.argv) == 2: # Listigi ŝlosilvortoj kaj ŝarĝo enhavo. ❶ se sys.argv [1] .lower () == 'lerta': ❷ pyperclip.copy (str (listo (mcbShelf.keys ()))) elif sys.argv [1] en mcbShelf: ❸ pyperclip.copy (mcbShelf [sys.argv [1]]) mcbShelf.close ()
Se estas nur unu komandlinio argumento, unue ni kontrolu ĉu ĝi estas
'list'
❶. Se jes, kordo reprezento de la lerta de breto klavoj estos kopiita al la tondujo ❷. La uzanto povas almeti tiun liston en malferman tekstoredaktilo por legi ĝin.
Alie, vi povas supozi la komandlinio argumento estas ŝlosilvorto. Se tiu ŝlosilvorto ekzistas en la
mcbShelf
breto kiel ŝlosilo, vi povas ŝarĝi la valoro sur la tondujo ❸.
Kaj tio estas ĝi! Ĵeti ĉi programo havas malsamajn ŝtupojn depende kion mastruma sistemo de via komputilo uzas. Vidu Appendix B por detaloj por via mastruma sistemo.
Memoras la pasvorton ŝranko programo vi kreis en Ĉapitro 6 kiu stokis la pasvortojn en vortaro. Ĝisdatigi la pasvortojn postulata ŝanĝi la fontkodon de la programo. Tio ne estas ideala ĉar mezumo uzantoj ne sentas komfortaj sxangxigxi fontkodo ĝisdatigi ilian softvaron. Ankaŭ, ĉiufoje vi modifi la fontkodon de programo, vi kuras la riskon de hazarde enkondukante novajn cimojn. Stokante
la datumoj por programo en malsama loko ol la kodo, vi povas fari viajn
programojn facile por aliaj uzi kaj pli imunaj al cimoj.
resumo
Dosieroj estas organizitaj en dosierujoj (ankaŭ nomita dosierujoj) kaj vojeton priskribas la lokon de dosiero. Ĉiu
programo kuranta sur via komputilo havas nun laboras dosierujo, kiu
permesas vin specifi dosiero vojojn relative al la nuna loko anstataŭ
ĉiam tajpas la plena (aŭ absolutaj) pado. La
os.path
modulo havas multajn funkciojn por manipulanta dosiero vojojn.
Viaj programoj povas ankaŭ rekte interagi kun la enhavo de teksto dosierojn. La
open()
funkcio povas malfermi tiujn dosierojn por legi en liaj enhavoj kiel unu granda ĉeno (kun la read()
telefono) aŭ kiel listo de kordoj (kun la readlines()
telefono). La open()
funkcio
povas malfermi dosierojn en registran aŭ append reĝimo krei novan
tekston dosierojn aŭ aldoni al ekzistanta teksto dosierojn, respektive.
En antaŭaj ĉapitroj, oni uzis la tondujo kiel maniero akiri grandajn
kvantojn de teksto en programo, prefere ol tajpi ĉion. Kaj vi povas havi
vian programoj legi dosierojn rekte de la malmola disko, kiu estas
granda plibonigo, ekde dosierojn estas multe malpli fluktuema ol la
tondujo.
En la sekva
ĉapitro, vi lernos kiel pritrakti la dosierojn mem, kopiante ilin,
forigi ilin, renomante ilin, movi ilin, kaj pli.
praktiko Demandoj
Q:
|
1. Kio estas relativa vojo relativa al?
|
Q:
|
2. Kion absolutan vojon komenci?
|
Q:
|
3. Kion la
os.getcwd() kaj os.chdir() funkcioj faras? |
Q:
|
4. Kio estas la
. kaj .. dosierujoj? |
Q:
|
5. En C: \ lardo \ ovojn \ spam.txt , kiu parto estas la dir nomo kaj kiu parto estas la bazo nomiĝas?
|
Q:
|
6. Kio estas la tri "modo" argumentoj kiuj eblas pasis al la
open() funkcio? |
Q:
|
7. Kio okazas se ekzistantan dosieron malfermigxas en registran reĝimo?
|
Q:
|
8. Kio estas la diferenco inter la
read() kaj readlines() metodoj? |
Q:
|
9. Kion datumstrukturo does breto valoro similas?
|
praktiko Projektoj
Por praktiko, dezajno kaj skribi la sekvajn programojn.
Etendante la Multiclipboard
Etendi la multiclipboard programo en ĉi tiu ĉapitro por ke ĝi havas
delete <keyword>
komandlinio argumento kiu forigos ŝlosilvorto de la breto. Tiam aldoni delete
komandlinio argumento kiu viŝos ĉiuj ŝlosilvortoj.mad Libs
Krei Mad Libs programo kiu legas en teksto dosierojn kaj permesas la uzanton aldoni ilian propran tekston ie la vorton adjektivo , substantivo , adverbo aŭ verbo aperas en la teksta dosiero. Ekzemple, tekstdosiero eble aspektos tiel ĉi:
La adjektivo pando marŝis al la substantivo kaj tiam verbo. Proksima substantivo estis netuŝita de tiuj okazaĵoj.
La programo trovus tiujn okazojn kaj instigas la uzanton por anstataŭi ilin.
Entajpu adjektivo: stulta Entajpu substantivo: lustron Entajpu verbo: ŝirkriis Entajpu substantivo: platkamiono
La jenaj tekstdosiero tiam estus kreita:
La stulta pando marŝis al la lustro kaj tiam kriis. Proksima pickup kamiono estis netuŝita de tiuj okazaĵoj.
La rezultoj devus presi al la ekrano kaj savi al nova tekstdosiero.
regex Serĉu
Skribi programon kiu malfermas ĉiujn. Txt dosierojn en dosierujo kaj serĉoj por ajna linio kiu kongruas uzanto-provizitaj regula esprimo. La rezultoj devus presi al la ekrano.
Nenhum comentário:
Postar um comentário