Monday 9 October 2017

Python Read Text File As Binary Alternativ


Python-filer I O. Detta kapitel täcker alla grundläggande IO-funktioner som finns tillgängliga i Python. För fler funktioner, se standard Python-dokumentation. Tryck på skärmen. Det enklaste sättet att producera utmatning är att använda utskriftsdeklarationen där du kan klara noll eller mer Uttryck separerade av kommatecken Denna funktion omvandlar de uttryck du passerar till en sträng och skriver resultatet till standardutmatningen enligt följande. Detta ger följande resultat på din standardskärm. Uppladdning av tangentbordets ingång. Den innehåller två inbyggda funktioner för att läsa en rad Text från standardinmatningen, som som standard kommer från tangentbordet Dessa funktioner är. Rawinput-funktionen. Rawinput-snabbfunktionen läser en rad från standardinmatningen och returnerar den som en sträng som tar bort den efterföljande nya linjen. Detta uppmanar dig att ange en sträng och det skulle visa samma sträng på skärmen När jag skrev Hello Python, är dess utgång så här. Inmatningsfunktionen. Inmatningsprompfunktionen motsvarar ravinput, förutom Att det antar ingången är ett giltigt Python-uttryck och returnerar det utvärderade resultatet till dig. Detta skulle ge följande resultat mot den inmatade inmatningen. Opening och avslutning av filer. Under nu har du läst och skrivit till standardinmatningen och utmatningen nu , Kommer vi att se hur man använder faktiska datafiler. Python ger grundläggande funktioner och metoder som behövs för att manipulera filer som standard. Du kan göra det mesta av filmanipulationen med ett filobjekt. Den öppna funktionen. Innan du kan läsa eller skriva en fil måste öppna den med Pythons inbyggda öppna funktion Den här funktionen skapar ett filobjekt som skulle användas för att ringa andra supportmetoder som är associerade med det. Här är parametern detaljer. filnamn Filnamnargumentet är ett strängvärde som innehåller namnet på Filen som du vill komma åt. accessmode Accessmode bestämmer det läge som filen måste öppnas, dvs läs, skriv, bifoga, etc. En fullständig lista med möjliga värden anges nedan i tabellen Detta är opt Ional-parametern och standardfilåtkomstläget läses r. buffering Om buffertvärdet är inställt på 0, sker ingen buffring Om buffertvärdet är 1 utförs linjebuffering när du får tillgång till en fil. Om du anger buffertvärdet som ett heltal större än 1, så utförs buffertverkan med den angivna buffertstorleken Om negativ är buffertstorleken det vanliga standardbeteendet för systemet. Här är en lista över de olika sätten att öppna en fil.7 Inmatning och utgång. Det finns flera sätt att presentera resultatet av en programdata kan skrivas ut i en läsbar form eller skrivas till en fil för framtida användning. Det här kapitlet kommer att diskutera några av möjligheterna.7 1 Mer avancerad formatering. Så långt har vi stött på två sätt att skriva värden uttrycksdeklarationer och utskriftsförklaringen En tredje väg använder skrivmetoden för filobjekt som standardutdatafilen kan refereras till som Se biblioteksreferensen för mer information om detta. Ofta vill du ha mer kontroll över f Ormatting av din produktion än att bara skriva ut rymdseparerade värden Det finns två sätt att formatera din produktion. Det första sättet är att göra all sträng som hanterar dig själv med hjälp av snedskärning och sammanbindningsoperationer. Du kan skapa en layout du kan tänka dig. Strängtyperna har några metoder Som utför användbara funktioner för padding strängar till en viss kolumnbredd dessa kommer att diskuteras inom kort. Det andra sättet är att använda metoden. Strängmodulen innehåller en Mall-klass som erbjuder ännu ett sätt att ersätta värden i strängar. En fråga kvarstår förstås hur konverterar du värden till strängar Lyckligtvis har Python sätt att konvertera valfritt värde till en sträng passera det till repr eller str-funktionerna. Str-funktionen är avsedd att återge representationer av värden som är ganska mänskliga läsbara medan repr är avsedd att generera representationer som kan tolkas av tolken eller kommer att tvinga en SyntaxError om det inte finns någon ekvivalent syntax För objekt som inte har en särskild representant för samma konsumtion, str kommer att returnera samma värde som repr. Många värden, såsom siffror eller strukturer som listor och ordböcker, har samma representation med antingen funktion. Strängar och flytpunktsnummer har i synnerhet två olika representationer. Här är två sätt att skriva ett bord med rutor och kuber. Observera att i det första exemplet ett utrymme mellan varje kolumn läggs till med det sätt som skrivaren fungerar lägger det alltid mellanrum mellan sina argument. Detta exempel visar metoden för strängobjekt, som rättjusterar en sträng i ett fält av en given bredd med padding det med mellanslag till vänster Det finns liknande metoder och dessa metoder skriver inte någonting, de returnerar bara en ny sträng Om inmatningssträngen är för lång, dumpar de inte det, men återför det oförändrat - out men det är vanligtvis bättre än alternativet, vilket skulle ligga om ett värde. Om du verkligen vill ha trunkning kan du alltid lägga till en skivoperation, som i. Det finns en annan metod som lägger en numerisk sträng till vänster med nollor Det Förstår om plus och minus signs. Basic användning av metoden ser så här ut. Fästena och karaktärerna inom dem som kallas formatfält ersätts med objekten som passeras in i metoden. Ett nummer i parentesen hänvisar till objektets position Passerade in i metoden. Om sökordsargument används i metoden hänvisas deras värden genom att använda namnet på argumentet. Alternativ - och nyckelordsargument kan kombineras med godtyckligt.7 2 Läser och skriver Files. open returnerar ett filobjekt och används oftast med två argument öppna filnamn, läge. Det första argumentet är en sträng som innehåller filnamnet Det andra argumentet är en annan sträng som innehåller några tecken som beskriver hur filen ska användas, kan r vara när filen bara kommer att bli läsas, w för att bara skriva en befintlig fil med samma namn kommer att raderas och en öppnar filen för att bifoga data som skrivs till filen läggs automatiskt till i slutet r öppnar filen för både läsning och skrivning. Lägesargumentet är Valfritt r antas om det är borttaget. I Windows öppnas b i läget B i filen i binärt läge, så det finns också lägen som rb wb och rb Python på Windows skiljer mellan text och binära filer i slutet F-line-tecken i textfiler förändras automatiskt lite när data läses eller skrivs. Denna modifiering av bakom kulisserna till fildata är bra för ASCII-textfiler, men det kommer att korrumpera binära data som i JPEG - eller EXE-filer. Var försiktig att använda binärt läge när du läser och skriver sådana filer På Unix gör det inte ont att lägga till läget, så du kan använda den plattformen - oberoende av alla binära filer.7 2 1 Metoder för filobjekt. Övriga exempel I det här avsnittet antas att ett filobjekt som heter f redan har skapats. För att läsa en fil s innehåll, ring som läser en viss mängd data och returnerar den som en strängstorlek är ett valfritt numeriskt argument När storleken är utelämnad eller negativ Hela innehållet i filen kommer att läsas och returneras det är ditt problem om filen är dubbelt så stor som maskinens minne. I övrigt läser och returneras längst storleksbyte Om filens slut har uppnåtts returnerar en tom sträng. Läser en enda rad från filen en ny linje karaktär n lämnas i slutet av strängen och släpps endast på den sista raden i filen om filen inte slutar i en ny linje. Detta gör att returneringsvärdet är entydigt om det returneras en tom sträng har filens slut nåtts, medan en tom linje representeras av en sträng som innehåller endast en enda ny linje. För att läsa rader från en fil kan du slingra över filobjektet. Det är minneseffektivt, snabbt och leder till enkel kod. Om du vill läsa alla rader i en fil i en lista kan du också använda listan f eller. skriver innehållet i strängen till filen och returnerar None. To skriva något annat än en sträng, måste det först konverteras till en sträng. Returnerar ett heltal som ger filobjektets nuvarande position i filen, mätt i byte från början av filen. För att ändra positionen för filobjektet, använd fromwhat Positionen beräknas från att lägga till offset till en referenspunkt som referenspunkten väljs av Det från vilket argument A från vilket värde som 0 mäter från början av filen, 1 använder den aktuella filpositionen och 2 använder slutet av filen som referenspunkten från vad som kan utelämnas och som standard är 0, med början av filen som referenspunkt. När du är färdig med en fil, ring för att stänga den och frigör eventuella systemresurser som tagits upp av den öppna filen. Efter att försök att använda filobjektet kommer det automatiskt att misslyckas. Det är bra att använda det med nyckelordet när det handlar om filobjekt Det här har fördelen att filen är ordentligt stängd efter avslutad svit, även om ett undantag höjs på vägen. Det är också mycket kortare än att skriva motsvarande försök - äntligen block. S har några ytterligare metoder, såsom isatty och truncate, som används mindre ofta, se Bibliotekshänvisning för en komplett guide till filobjekt.7 2 2 Spara strukturerad data med json. Strings kan enkelt skrivas till och läsas från en fil Numbers take Lite mer ansträngning, eftersom läsmetoden bara returnerar strängar, som måste vidarebefordras till en funktion som int som tar en sträng som 123 och returnerar sitt numeriska värde 123 När du vill spara mer komplexa datatyper som kapslade listor och ordböcker Parsing och serialisering för hand blir komplicerat. I stället för att användare kontinuerligt skriver och debuggerar kod för att spara komplicerade datatyper till filer, tillåter Python dig att använda det populära datautbytesformatet kallat JSON JavaScript Objektnotation Standardmodulen kallad json kan ta Python-data hierarkier och konvertera dem till strängrepresentationer kallas denna process serialiserande. Rekonstruera data från strängrepresentationen kallas deserializ Ing Mellan serialisering och deserialisering kan strängen som representerar objektet ha lagrats i en fil eller data, eller skickas över en nätverksanslutning till en avlägsen maskin. JSON-formatet används vanligtvis av moderna applikationer för att möjliggöra datautbyte. Många programmerare är redan Bekant med det, vilket gör det till ett bra val för interoperabilitet. Om du har ett objekt x kan du se sin JSON-strängrepresentation med en enkel kodlinje. En annan variant av dumpfunktionen, kallad dumpning, serialiserar bara objektet till en fil Så Om f är ett filobjekt öppet för skrivning kan vi göra det. Till avkoda objektet igen, om f är ett filobjekt som har öppnats för läsning. Denna enkla serialiseringsteknik kan hantera listor och ordböcker, men serialiserar godtyckliga klassförekomster i JSON kräver lite extra ansträngning Referensen för json-modulen innehåller en förklaring av this. pickle - pickle-modulen. I motsats till JSON-pickle är ett protokoll som tillåter serialisering o f godtyckligt komplexa Python-objekt Som sådan är det specifikt för Python och kan inte användas för att kommunicera med applikationer som skrivits på andra språk. Det är också osäkert som standard att deserialiserande pickle-data som kommer från en otillförlitlig källa kan utföra godtycklig kod, om data skapades av en skicklig angripare. Läser och skriver filer i Python. När du jobbar med Python behöver du inte importera ett bibliotek för att kunna läsa och skriva filer. Det hanteras naturligt på språket, om än på ett unikt sätt. Det första Du behöver göra är att använda Pythons inbyggda öppna funktion för att få ett filobjekt. Den öppna funktionen öppnar en fil Det är enkelt. När du använder den öppna funktionen returnerar den något som kallas ett filobjekt. Filobjekt innehåller metoder och attribut som kan användas för att samla in information om filen du öppnade. De kan också användas för att manipulera nämnda fil. Exempelvis anger lägesattributet för ett filobjekt vilket läge en fil öppnades i och namnet attributet berättar är du namnet på den fil som filobjektet har öppnat. Du måste förstå att ett fil - och filobjekt är två helt separata men relaterade saker. Vad du kanske vet som en fil är lite annorlunda i Python. I Windows, till exempel, En fil kan vara vilken som helst objekt som manipuleras, redigeras eller skapas av användaren OS Det betyder att filer kan vara bilder, textdokument, körbara filer och mycket mer. De flesta filer är organiserade genom att hålla dem i enskilda mappar. I Python kategoriseras en fil som antingen text eller binär, och skillnaden mellan de två filtyperna är viktig. Textfiler är strukturerad som en följd av linjer, där varje rad innehåller en sekvens av tecken. Det här är vad du vet som kod eller syntax. Varje rad avslutas med en speciell Karaktär, kallad EOL eller End of Line-tecken Det finns flera typer, men det vanligaste är kommatecken eller newline-karaktären Det avslutar den aktuella raden och berättar tolken att en ny har börjat. En backslash-tecken kan också användas, och det Berättar int tolkare att nästa tecken efter snedstrecket ska behandlas som en ny linje Denna karaktär är användbar när du inte vill starta en ny rad i själva texten men i koden. En binär fil är någon typ av fil som inte är en Textfil På grund av sin karaktär kan binära filer endast hanteras av en applikation som känner till eller förstår filens struktur. Med andra ord måste de vara program som kan läsa och tolka binära. Öppna funktion. För att öppna en fil för att skriva eller använd i Python, måste du förlita sig på den inbyggda öppna funktionen. Som förklaras ovan kommer öppna att returnera ett filobjekt, så det används oftast med två argument. Ett argument är inget mer än ett värde som har tillhandahållits till en funktion som vidarebefordras när du kallar det. Så om vi förklarar namnet på en fil som testfil, skulle det namnet betraktas som ett argument. Syntaxen för att öppna ett filobjekt i Python är det andra argumentet du se läget berättar tolk och utvecklare vilket sätt t han fil kommer att användas. Inkluderande ett lägesargument är valfritt eftersom ett standardvärde av r antas om det utelämnas. R-värdet står för läsläge, vilket är bara ett av many. r läsläge som används när filen är bara läses. w Skrivläget som används för att redigera och skriva ny information till filen kommer alla befintliga filer med samma namn att raderas när det här läget är aktiverat. a Tilläggsläge, som används för att lägga till nya data i slutet av filen som är ny information ändras automatiskt till slutet. r Särskilt läs - och skrivläge, som används för att hantera båda åtgärderna när man arbetar med en fil. Så låt oss ta en titt på ett snabbt exempel. Denna snippet öppnar filen namnet arbetsfält i skrivläge så att vi kan göra ändringar i den aktuella informationen som lagras i filen visas eller skrivs ut för att vi ska kunna se. När detta har gjorts kan du gå vidare för att ringa till objektfunktionerna De två vanligaste funktionerna läs och skriv. Köp en textfil. För att få fler famili Ar med textfiler i Python, låt oss skapa vår egen och göra några extra övningar. Använd en enkel textredigerare, låt oss skapa en fil. Du kan namnge det du vill, och det är bättre att använda något du ska identifiera med. Syftet med denna handledning är dock att vi ska ringa den. Bara skapa filen och lämna den tom. För att manipulera filen skriver du följande i din Python-miljö kan du kopiera och klistra om du gillar. Naturligt, om du öppna textfilen eller titta på den med Python så kommer du bara se texten vi sa till tolken att lägga till. Läser en textfil i Python. Det finns faktiskt ett antal sätt att läsa en textfil i Python, inte bara en. Om du måste extrahera en sträng som innehåller alla tecken i filen, du kan använda följande metod. Den fulla koden för att arbeta med den här metoden kommer att se ut så här. Utdata från det här kommandot kommer att visa all text inuti filen, den samma text vi berättade för tolken att lägga till tidigare Det finns inget behov av att skriva allt o ut igen, men om du måste veta kommer allt att visas med undantag för kattlinjen. Ett annat sätt att läsa en fil är att ringa ett visst antal tecken. Till exempel, med följande kod läser tolken de fem första tecknen Lagrade data och returnera den som en sträng. Notera hur vi använder samma metod, bara den här gången anger vi antalet tecken att bearbeta. Utdata för detta kommer att se ut. Om du vill läsa en fillinje för rad i motsats att dra innehållet i hela filen på en gång, då använder du läsfunktionen. Varför skulle du använda något som det här. Låt oss säga att du bara vill se den första raden i filen eller den tredje Du skulle utföra läsfunktionen så många tider som möjligt för att få de data du letade efter. Varje gång du kör metoden kommer den att returnera en sträng av tecken som innehåller en enda rad information från filen. Detta skulle returnera den första raden av filen, som så. Om vi ​​ville återvända bara den tredje raden i filen, vi skulle använda detta. Men vad händer om vi ville återvända varje rad i filen, åtskilda från varandra. Du skulle använda samma funktion, bara i en ny form. Detta kallas funktionen. Den utmatning du skulle få från det här är. Notice hur varje Linjen är separerad i enlighet med detta. Observera att det här inte är det perfekta sättet att visa användarna innehållet i en fil. Men det är bra när du vill samla information snabbt för personligt bruk under utveckling eller återkallning. Löp över ett filobjekt. När du vill läsa eller returnera alla rader från en fil i ett mer minneseffektivt och snabbt sätt kan du använda loop-över-metoden Fördelen att använda den här metoden är att den relaterade koden är både enkel och lätt att läsa. Detta kommer att återvända. Se hur Mycket enklare än tidigare metoder. Använda File Write Method. En sak som du kommer att märka om filskrivningsmetoden är att den bara kräver en enda parameter, vilken sträng du vill skriva. Den här metoden används för att lägga till Information eller innehåll till en befintlig fil För att starta en ny rad efter att du har skrivit data till filen kan du lägga till en EOL-karaktär. Det här kommer naturligtvis att ändra vår nuvarande fil för att inkludera de två nya raderna av text. Det är ingen anledning att visa output. Closing a File. When du Om du gör det, kan du använda fh-kommandot för att avsluta saker. Vad det här gör är att stänga filen fullständigt, avsluta resurser som används, och frigöra dem för att systemet ska kunna distribueras på annat håll. Det är viktigt att förstå att när du använder fh metod kommer eventuella ytterligare försök att använda filobjektet att misslyckas. Notera hur vi har använt det här i flera av våra exempel för att avsluta interaktionen med en fil. Detta är bra praxis. Hantera hantering i den verkliga världen. För att hjälpa dig att bättre förstå några av de Metoder som diskuteras här kommer vi att erbjuda några exempel på att de används i den verkliga världen. Känn dig fri att kopiera koden och prova själv i en Python-tolk, se till att du har några namngivna filer skapade och tillgängliga först. textfil. Läser en textfil. För att läsa en textfil en rad i taget. Första gången du loggar in på developerWorks skapas en profil för dig Välj information i ditt profilnamn, landregion och företag visas för allmänheten och kommer att följa innehåll som du postar. Du kan uppdatera ditt IBM-konto när som helst. All information som lämnas in är säker. Första gången du loggar in på developerWorks, skapas en profil för dig, så du måste välja ett visningsnamn. Din visningsnamn följer med det innehåll du skickar på developerworks. Välj då Ett visningsnamn mellan 3-31 tecken Ditt visningsnamn måste vara unikt i developerWorks-communityen och bör inte vara din e-postadress av privatlivets skull. All information som lämnas är säker. Upptäck Python, del 8 Läs och skriv data med hjälp av Python s inmatning och utdata funktionalitet. Mer om hur man använder ordböcker effektivt. Robert Brunner, NCSA Forskningsassistent, biträdande professor i astronomi, University of Illinois, Urbana-Champaign. Robert J Brunner är en forskning Forskare vid National Center for Supercomputing Applications och en biträdande professor i astronomi vid University of Illinois, Urbana-Champaign. Han har publicerat flera böcker och ett antal artiklar och handledning om en rad ämnen. Du kan nå honom på. Sammanfattning I den här artikeln , du lär dig hur du arbetar med filer Först granskar vi ett enkelt sätt att mata ut data i Python med hjälp av utskriftsdeklarationen och läser sedan om filobjektet som används av Python-program för att läsa och skriva data till en fil. De olika lägena Med vilken en fil kan öppnas visas och artikeln avslutas genom att visa hur man läser och skriver en binär fil. Date 03 Jan 2006 Nivå Intermediate. In de tidigare artiklarna i Discover Python-serien lärde du dig om de grundläggande Python datatyperna och några av behållardatatyperna, såsom tupelsträngen och listan Andra artiklar diskuterade de villkorliga och looping-funktionerna i Python-språket och hur de fungerar tillsammans med behållardatatypen s för att förenkla programmeringsuppgifter Det sista grundläggande steget involverade i att skriva program är att läsa data från och skriva data till en fil. Efter att ha läst den här artikeln kommer du att kunna lära dig att lära dig denna färdighet från din att göra-lista. Du har skrivit utdata med hjälp av utskriftsdeklarationen, som som standard skriver uttrycket som en sträng till skärmen eller konsolfönstret Detta visas i Lista 1, vilket upprepar ditt första Hello, World Python-program med några mindre tweaks. Som det här exemplet visar, skriva data är enkelt med utskriftsutgåvan Först utmatar exemplet en enkel sträng Då skapas och utmatas en sammansatt sträng som skapats med hjälp av strängformateringstekniken. Efter det ändras emellertid saker från den tidigare versionen av koden Nästa rad skapar en filobjekt, passerar i namnet och aw-tecknet för att låta dig skriva till filen. Du använder sedan ett modifierat utskriftsutdrag - med två större än symboler följt av variabeln som håller filobjektet - till w Rita samma sträng s Den här tiden är dock inte data som visas på skärmen Den naturliga frågan är, var gick data och Vad är det här filobjektet. Den första frågan är lätt att svara Sök efter filen och visa Dess innehåll som visas nedan. Som du kan se, skrivdes data till filen exakt som den skulle ha skrivits till skärmen tidigare. Nu märker du den sista raden i Listing 1, som kallar en nära metod på filobjektet. Detta Är viktigt i Python-program eftersom filinmatning och - utmatning som standard är buffrad data inte skrivet så snart du ringer ett utskriftsdeklaration men istället skrivs i bitar. De enklaste mekanismerna för att berätta för Python att skriva dina data till filen är att explicit Kalla den närmaste metoden. Filobjektet är den grundläggande mekanismen som du interagerar med filer på din dator. Du kan använda filobjektet för att läsa data, skriva data, lägga till data i en fil och arbeta med antingen binära eller textliga Data. Den enklaste tekniken för lear Ning mer om filobjektet är att be om hjälp, som visas i Listing 2.Listing 2 Få hjälp till filobjektet. Om hjälpfunktionen indikerar är det enkelt att arbeta med ett filobjekt. Du skapar ett filobjekt med hjälp av filkonstruktorn eller Den öppna metoden, som är ett alias för filkonstruktorn Den andra parametern, som är valfri, anger hur filen ska användas. r visar att du vill läsa data från filen. W anger att du vill skriva data till filen, avkorta föregående innehåll. A indikerar att du vill skriva data till filen och lägga till i slutet. R indikerar att du kommer läsa från och skriva för att radera eventuella tidigare data filen. r a anger att du kommer läsa från och skriva för att bifoga filen. b indikerar att du ska läsa eller skriva binära data. Den första kodlistan i den här artikeln skrev data till en fil Nu visar Listning 3 hur man läser dessa data i ett Python-program och analyserar innehållet i filen. Att visa 3 läsdata från en fil. För att läsa data skapar du först ett lämpligt filobjekt - i det här fallet en som öppnar filen - och läser innehållet med läsmetoden. Den här metoden läser hela filen till en sträng som skrivs ut till Konsolen i det här programmet Det andra samtalet till läsmetoden, där du försöker att tilldela värdet till str-variabeln, returnerar en tom sträng Detta händer eftersom den första läsoperationen läser hela filen När du försöker läsa innehållet igen, re i slutet av filen så att ingenting kan läsas. Lösningen på det här problemet är också enkelt. Tala om filobjektet för att gå tillbaka till början av filen. Du gör det via sökmetoden, som tar en enda parameter som indikerar Var i filen du vill börja läsa o R skriver till exempel, noll anger filens start Sökmetoden möjliggör mer komplexa operationer, men de kan vara farliga. För nu, låt oss hålla fast vid den enkla användningen. Nu när du återkommer till början av filen, så kan läsa filinnehållet i en strängvariabel och analysera innehållet i strängen på lämpligt sätt. Observera att raderna i filen särskiljs av en ny linje eller en rad i slutet. Om du försöker ringa split-metoden på strängen kommer den att dela upp På ett mellanslagstegn som utrymmet Om du vill att metoden delar upp linjerna baserade på en nylinjeskrift måste du explicit ange den nya linjeskalan. Du kan sedan dela upp strängen och iterera över linjerna i filen inom en för loop. Det verkar som om Mycket arbete bara för att läsa och bearbeta en enda rad från en fil. Python gör enkla saker enkelt, så du undrar nog om några genvägar är tillgängliga för den här uppgiften. Såsom visas i Lista 4 är svaret ja. Lyssna 4 Läsa och analysera lines. L Isting 4 visar tre tekniker för att läsa och analysera linjerna i en textfil. Först öppnar du en fil och tilldelar den till en variabel. Du ringer sedan läsningsmetoden, som läser hela filen i minnet och delar innehållet i en lista med sträng s För loop slingrar över listan med strängar s, skriver ut dem en i taget. Den andra för slingan förenklar denna process lite med hjälp av en implicit variabel som är en som inte uttryckligen skapats för filobjektet. Du öppnar Fil och läs innehållet på en gång, vilket ger samma resultat som det första explicit exemplet. Det sista exemplet förenklar saker ännu mer och visar förmågan att iterera direkt över ett filobjekt. Observera att detta är en ny egenskap hos Python och därför Kanske inte fungerar på din dator I det här fallet skapar du ett implicit filobjekt och Python gör resten, så att du kan iterera över alla rader i filen. Ibland kanske du vill ha en finare kontrollnivå när du r e läser data från en fil I det här fallet bör du använda läsningsmetoden som visas i Listing 5.Detta exempel visar hur man flyttar genom en fil som läser en rad i taget eller explicit flyttar filpositionsindikatorn med sökmetoden You första steget genom fillinjen för rad med hjälp av läsningsmetoden När du når slutet av filen returnerar läsmetoden en tom sträng. Att försöka fortsätta läsa förbi slutet av filen på detta sätt orsakar inte ett fel, men returnerar en tom sträng. Du hoppar sedan tillbaka till början av filen och läser en annan rad. Berättelsemetoden visar var du befinner dig i filen som ska vara efter första raden av text - i det här fallet vid 13: e teckenpositionen. Genom att använda detta kunskap kan du passera i en parameter till läsmetoden eller läsningsmetoden för att styra hur många tecken som läses. För läsmetoden är denna parameter 17 i det här exemplet antalet tecken som kommer att läsas från filen. Läslinjemetoden, läser emellertid det angivna antalet tecken och fortsätter att läsa fram till slutet av den raden. I det här exemplet läser den första och andra raden av text. Så långt har exemplen fokuserat på att läsa data, inte skriva data. Såsom visas i Listning 6 Det är dock lätt att skriva när du vet grunderna i att arbeta med filobjektet. För att skriva data till en fil måste du först skapa filobjektet. I det här fallet måste du ange att du vill skriva till filen genom att Använda w-läge flaggan I det här exemplet skriver du innehållet i mydata-listan till filen, stänger filen och öppnar sedan filen igen så att du kan läsa innehållet. Dock vill du läsa till och skriva från En fil samtidigt, så nästa del av det här exemplet öppnar filen med r-läget. Eftersom du kan skriva till filen, inte bifoga, kommer filen att styras. Först skriver du innehållet i mydata-listan till filen, så flyttar du filpekaren till början av filen och läser den E-innehåll Detta exempel stänger sedan filen och öppnas igen med läs - och append-läget, ra. Som exemplet kod visar, är filinnehållet nu resultatet av två skrivoperationer. Texten upprepas. Alla tidigare exempel har behandlat text eller teckendata Du skrev och läste teckensträng s I vissa situationer - men när du till exempel arbetar med heltal eller komprimerade filer - måste du kunna läsa och skriva binära data. Du kan enkelt göra det i Python genom att Lägger till b i filläget när du skapar filobjektet, som visas i Listing 7.Listing 7 Arbetar med binär data. I det här exemplet skapar du ett lämpligt filobjekt och skriver sedan de binära tecknen med ASCII-värden från 50 till 69 Du konvertera heltal som skapats av samtalet till intervallmetoden till tecknet med chr-metoden När du har skrivit all data stänger du filen och öppnar den igen för att läsa igen med hjälp av binärlägesflaggan. Läser filen visar att Du skrev helt enkelt inte heltalsna till filen istället, du skrev sina karaktärsvärden. När du läser och skriver binär data måste du vara försiktig eftersom olika plattformar lagrar binär data på olika sätt. Om du måste arbeta med binära data, s bäst att använda ett lämpligt objekt från Python-biblioteket eller en tredjepartsutvecklare. Den här artikeln diskuterade hur man läser och skriver data till en fil från ett Python-program. Totalt är processen enkel. Skapa ett lämpligt filobjekt, läs eller Skriv som nödvändigt Men du måste vara försiktig med trunkning när du använder skrivläge för att skapa ett filobjekt för att skriva data till en fil. Om du behöver lägga till data i en fil bör du använda append-läget när du skapar filobjektet. Läs Alla artiklar i developerWorks Discover Python-serien. När du har en fungerande Python-tolk är Python-handledningen ett bra ställe att börja lära språket. Visa utvecklaren Works Open Source-zonen för omfattande hur information, tools, and project updates to help you develop with open source technologies and use them with IBM s products. Get products and technologies. Innovate your next open source development project with IBM trial software available for download or on DVD. Get involved in the developerWorks community by participating in developerWorks blogs. Robert J Brunner is a Research Scientist at the National Center for Supercomputing Applications and an Assistant Professor of Astronomy at the University of Illinois, Urbana-Champaign He has published several books and a number of articles and tutorials on a range of topics You can reach him at. Report abuse. Report abuse. developerWorks Sign in. Choose your display name.16 2 io Core tools for working with streams.16 2 1 Overview. The io module provides Python s main facilities for dealing with various types of I O There are three main types of I O text I O binary I O and raw I O These are generic categories, and various backing stores can be used fo r each of them A concrete object belonging to any of these categories is called a file object Other common terms are stream and file-like object. Independently of its category, each concrete stream object will also have various capabilities it can be read-only, write-only, or read-write It can also allow arbitrary random access seeking forwards or backwards to any location , or only sequential access for example in the case of a socket or pipe. All streams are careful about the type of data you give to them For example giving a str object to the write method of a binary stream will raise a TypeError So will giving a bytes object to the write method of a text stream. Changed in version 3 3 Operations that used to raise IOError now raise OSError since IOError is now an alias of OSError.16 2 1 1 Text I O. Text I O expects and produces str objects This means that whenever the backing store is natively made of bytes such as in the case of a file , encoding and decoding of data is made transpare ntly as well as optional translation of platform-specific newline characters. The easiest way to create a text stream is with open optionally specifying an encoding. In-memory text streams are also available as StringIO objects. The text stream API is described in detail in the documentation of TextIOBase.16 2 1 2 Binary I O. Binary I O also called buffered I O expects bytes-like objects and produces bytes objects No encoding, decoding, or newline translation is performed This category of streams can be used for all kinds of non-text data, and also when manual control over the handling of text data is desired. The easiest way to create a binary stream is with open with b in the mode string. In-memory binary streams are also available as BytesIO objects. The binary stream API is described in detail in the docs of BufferedIOBase. Other library modules may provide additional ways to create text or binary streams See for example.16 2 1 3 Raw I O. Raw I O also called unbuffered I O is generally used as a low-level building-block for binary and text streams it is rarely useful to directly manipulate a raw stream from user code Nevertheless, you can create a raw stream by opening a file in binary mode with buffering disabled. The raw stream API is described in detail in the docs of RawIOBase.16 2 2 High-level Module Interface. An int containing the default buffer size used by the module s buffered I O classes open uses the file s blksize as obtained by if possible. This is an alias for the builtin open function. exception io BlockingIOError. This is a compatibility alias for the builtin BlockingIOError exception. exception io UnsupportedOperation. An exception inheriting OSError and ValueError that is raised when an unsupported operation is called on a stream.16 2 2 1 In-memory streams. It is also possible to use a str or bytes-like object as a file for both reading and writing For strings StringIO can be used like a file opened in text mode BytesIO can be used like a file opened in binary mode Both provide full read-write capabilities with random access.16 2 3 Class hierarchy. The implementation of I O streams is organized as a hierarchy of classes First abstract base classes ABCs , which are used to specify the various categories of streams, then concrete classes providing the standard stream implementations. The abstract base classes also provide default implementations of some methods in order to help implementation of concrete stream classes For example, BufferedIOBase provides unoptimized implementations of readinto and readline. At the top of the I O hierarchy is the abstract base class IOBase It defines the basic interface to a stream Note, however, that there is no separation between reading and writing to streams implementations are allowed to raise UnsupportedOperation if they do not support a given operation. The RawIOBase ABC extends IOBase It deals with the reading and writing of bytes to a stream FileIO subclasses RawIOBase to provide an interface to files in the machine s file system. The BufferedIOBase ABC deals with buffering on a raw byte stream RawIOBase Its subclasses, BufferedWriter BufferedReader and BufferedRWPair buffer streams that are readable, writable, and both readable and writable BufferedRandom provides a buffered interface to random access streams Another BufferedIOBase subclass, BytesIO is a stream of in-memory bytes. The TextIOBase ABC, another subclass of IOBase deals with streams whose bytes represent text, and handles encoding and decoding to and from strings TextIOWrapper which extends it, is a buffered text interface to a buffered raw stream BufferedIOBase Finally, StringIO is an in-memory stream for text. Argument names are not part of the specification, and only the arguments of open are intended to be used as keyword arguments. The following table summarizes the ABCs provided by the io module.16 2 3 1 I O Base Classes. The abstract base class for all I O classes, acting on streams of bytes There is no public construc tor. This class provides empty abstract implementations for many methods that derived classes can override selectively the default implementations represent a file that cannot be read, written or seeked. Even though IOBase does not declare read readinto or write because their signatures will vary, implementations and clients should consider those methods part of the interface Also, implementations may raise a ValueError or UnsupportedOperation when operations they do not support are called. The basic type used for binary data read from or written to a file is bytes Other bytes-like objects are accepted as method arguments too In some cases, such as readinto a writable object such as bytearray is required Text I O classes work with str data. Note that calling any method even inquiries on a closed stream is undefined Implementations may raise ValueError in this case. IOBase and its subclasses supports the iterator protocol, meaning that an IOBase object can be iterated over yielding the lines in a stream Lines are defined slightly differently depending on whether the stream is a binary stream yielding bytes , or a text stream yielding character strings See readline below. IOBase is also a context manager and therefore supports the with statement In this example, file is closed after the with statement s suite is finished even if an exception occurs. IOBase provides these data attributes and methods. Flush and close this stream This method has no effect if the file is already closed Once the file is closed, any operation on the file e g reading or writing will raise a ValueError. As a convenience, it is allowed to call this method more than once only the first call, however, will have an effect. True if the stream is closed. Return the underlying file descriptor an integer of the stream if it exists An OSError is raised if the IO object does not use a file descriptor. Flush the write buffers of the stream if applicable This does nothing for read-only and non-blocking streams. Retur n True if the stream is interactive i e connected to a terminal tty device. Return True if the stream can be read from If False read will raise OSError. Read and return one line from the stream If size is specified, at most size bytes will be read. The line terminator is always b n for binary files for text files, the newline argument to open can be used to select the line terminator s recognized. Read and return a list of lines from the stream hint can be specified to control the number of lines read no more lines will be read if the total size in bytes characters of all lines so far exceeds hint. Note that it s already possible to iterate on file objects using for line in file without calling. Change the stream position to the given byte offset offset is interpreted relative to the position indicated by whence The default value for whence is SEEKSET Values for whence are. SEEKSET or 0 start of the stream the default offset should be zero or positive. SEEKCUR or 1 current stream position off set may be negative. SEEKEND or 2 end of the stream offset is usually negative. Return the new absolute position. New in version 3 1 The SEEK constants. New in version 3 3 Some operating systems could support additional values, like or The valid values for a file could depend on it being open in text or binary mode. Return True if the stream supports random access If False seek tell and truncate will raise OSError. Return the current stream position. Resize the stream to the given size in bytes or the current position if size is not specified The current stream position isn t changed This resizing can extend or reduce the current file size In case of extension, the contents of the new file area depend on the platform on most systems, additional bytes are zero-filled The new file size is returned. Changed in version 3 5 Windows will now zero-fill files when extending. Return True if the stream supports writing If False write and truncate will raise OSError. Write a list of lines to the stream Lin e separators are not added, so it is usual for each of the lines provided to have a line separator at the end. Prepare for object destruction IOBase provides a default implementation of this method that calls the instance s close method. Base class for raw binary I O It inherits IOBase There is no public constructor. Raw binary I O typically provides low-level access to an underlying OS device or API, and does not try to encapsulate it in high-level primitives this is left to Buffered I O and Text I O, described later in this page. In addition to the attributes and methods from IOBase RawIOBase provides the following methods. Read up to size bytes from the object and return them As a convenience, if size is unspecified or -1, readall is called Otherwise, only one system call is ever made Fewer than size bytes may be returned if the operating system call returns fewer than size bytes. If 0 bytes are returned, and size was not 0, this indicates end of file If the object is in non-blocking mode and no bytes are available, None is returned. Read and return all the bytes from the stream until EOF, using multiple calls to the stream if necessary. Read bytes into a pre-allocated, writable bytes-like object b and return the number of bytes read If the object is in non-blocking mode and no bytes are available, None is returned. Write the given bytes-like object b to the underlying raw stream, and return the number of bytes written This can be less than the length of b in bytes, depending on specifics of the underlying raw stream, and especially if it is in non-blocking mode None is returned if the raw stream is set not to block and no single byte could be readily written to it The caller may release or mutate b after this method returns, so the implementation should only access b during the method call. class io BufferedIOBase. Base class for binary streams that support some kind of buffering It inherits IOBase There is no public constructor. The main difference with RawIOBase is that m ethods read readinto and write will try respectively to read as much input as requested or to consume all given output, at the expense of making perhaps more than one system call. In addition, those methods can raise BlockingIOError if the underlying raw stream is in non-blocking mode and cannot take or give enough data unlike their RawIOBase counterparts, they will never return None. Besides, the read method does not have a default implementation that defers to readinto. A typical BufferedIOBase implementation should not inherit from a RawIOBase implementation, but wrap one, like BufferedWriter and BufferedReader do. BufferedIOBase provides or overrides these methods and attribute in addition to those from IOBase. The underlying raw stream a RawIOBase instance that BufferedIOBase deals with This is not part of the BufferedIOBase API and may not exist on some implementations. Separate the underlying raw stream from the buffer and return it. After the raw stream has been detached, the buffer i s in an unusable state. Some buffers, like BytesIO do not have the concept of a single raw stream to return from this method They raise UnsupportedOperation. New in version 3 1.Read and return up to size bytes If the argument is omitted, None or negative, data is read and returned until EOF is reached An empty bytes object is returned if the stream is already at EOF. If the argument is positive, and the underlying raw stream is not interactive, multiple raw reads may be issued to satisfy the byte count unless EOF is reached first But for interactive raw streams, at most one raw read will be issued, and a short result does not imply that EOF is imminent. A BlockingIOError is raised if the underlying raw stream is in non blocking-mode, and has no data available at the moment. Read and return up to size bytes, with at most one call to the underlying raw stream s read or readinto method This can be useful if you are implementing your own buffering on top of a BufferedIOBase object. Read bytes in to a pre-allocated, writable bytes-like object b and return the number of bytes read. Like read multiple reads may be issued to the underlying raw stream, unless the latter is interactive. A BlockingIOError is raised if the underlying raw stream is in non blocking-mode, and has no data available at the moment. Read bytes into a pre-allocated, writable bytes-like object b using at most one call to the underlying raw stream s read or readinto method Return the number of bytes read. A BlockingIOError is raised if the underlying raw stream is in non blocking-mode, and has no data available at the moment. New in version 3 5.Write the given bytes-like object b and return the number of bytes written always equal to the length of b in bytes, since if the write fails an OSError will be raised Depending on the actual implementation, these bytes may be readily written to the underlying stream, or held in a buffer for performance and latency reasons. When in non-blocking mode, a BlockingIOError is raise d if the data needed to be written to the raw stream but it couldn t accept all the data without blocking. The caller may release or mutate b after this method returns, so the implementation should only access b during the method call.16 2 3 2 Raw File I O. FileIO represents an OS-level file containing bytes data It implements the RawIOBase interface and therefore the IOBase interface, too. The name can be one of two things. a character string or bytes object representing the path to the file which will be opened In this case closefd must be True the default otherwise an error will be raised. an integer representing the number of an existing OS-level file descriptor to which the resulting FileIO object will give access When the FileIO object is closed this fd will be closed as well, unless closefd is set to False. The mode can be r w x or a for reading default , writing, exclusive creation or appending The file will be created if it doesn t exist when opened for writing or appending it will be truncated when opened for writing FileExistsError will be raised if it already exists when opened for creating Opening a file for creating implies writing, so this mode behaves in a similar way to w Add a to the mode to allow simultaneous reading and writing. The read when called with a positive argument , readinto and write methods on this class will only make one system call. A custom opener can be used by passing a callable as opener The underlying file descriptor for the file object is then obtained by calling opener with name flags opener must return an open file descriptor passing as opener results in functionality similar to passing None. See the open built-in function for examples on using the opener parameter. Changed in version 3 3 The opener parameter was added The x mode was added. Changed in version 3 4 The file is now non-inheritable. In addition to the attributes and methods from IOBase and RawIOBase FileIO provides the following data attributes. The mode as given in the con structor. The file name This is the file descriptor of the file when no name is given in the constructor.16 2 3 3 Buffered Streams. Buffered I O streams provide a higher-level interface to an I O device than raw I O does. A stream implementation using an in-memory bytes buffer It inherits BufferedIOBase The buffer is discarded when the close method is called. The optional argument initialbytes is a bytes-like object that contains initial data. BytesIO provides or overrides these methods in addition to those from BufferedIOBase and IOBase. Return a readable and writable view over the contents of the buffer without copying them Also, mutating the view will transparently update the contents of the buffer. As long as the view exists, the BytesIO object cannot be resized or closed. New in version 3 2.Return bytes containing the entire contents of the buffer. In BytesIO this is the same as read. In BytesIO this is the same as readinto. New in version 3 5.class io BufferedReader raw buffersize DEFAULTBU FFERSIZE. A buffer providing higher-level access to a readable, sequential RawIOBase object It inherits BufferedIOBase When reading data from this object, a larger amount of data may be requested from the underlying raw stream, and kept in an internal buffer The buffered data can then be returned directly on subsequent reads. The constructor creates a BufferedReader for the given readable raw stream and buffersize If buffersize is omitted, DEFAULTBUFFERSIZE is used. BufferedReader provides or overrides these methods in addition to those from BufferedIOBase and IOBase. Return bytes from the stream without advancing the position At most one single read on the raw stream is done to satisfy the call The number of bytes returned may be less or more than requested. Read and return size bytes, or if size is not given or negative, until EOF or if the read call would block in non-blocking mode. Read and return up to size bytes with only one call on the raw stream If at least one byte is buffered, onl y buffered bytes are returned Otherwise, one raw stream read call is made. class io BufferedWriter raw buffersize DEFAULTBUFFERSIZE. A buffer providing higher-level access to a writeable, sequential RawIOBase object It inherits BufferedIOBase When writing to this object, data is normally placed into an internal buffer The buffer will be written out to the underlying RawIOBase object under various conditions, including. when the buffer gets too small for all pending data. when flush is called. when a seek is requested for BufferedRandom objects. when the BufferedWriter object is closed or destroyed. The constructor creates a BufferedWriter for the given writeable raw stream If the buffersize is not given, it defaults to DEFAULTBUFFERSIZE. BufferedWriter provides or overrides these methods in addition to those from BufferedIOBase and IOBase. Force bytes held in the buffer into the raw stream A BlockingIOError should be raised if the raw stream blocks. Write the bytes-like object b and return the n umber of bytes written When in non-blocking mode, a BlockingIOError is raised if the buffer needs to be written out but the raw stream blocks. class io BufferedRandom raw buffersize DEFAULTBUFFERSIZE. A buffered interface to random access streams It inherits BufferedReader and BufferedWriter and further supports seek and tell functionality. The constructor creates a reader and writer for a seekable raw stream, given in the first argument If the buffersize is omitted it defaults to DEFAULTBUFFERSIZE. class io BufferedRWPair reader writer buffersize DEFAULTBUFFERSIZE. A buffered I O object combining two unidirectional RawIOBase objects one readable, the other writeable into a single bidirectional endpoint It inherits BufferedIOBase. reader and writer are RawIOBase objects that are readable and writeable respectively If the buffersize is omitted it defaults to DEFAULTBUFFERSIZE. BufferedRWPair does not attempt to synchronize accesses to its underlying raw streams You should not pass it the same object as reader and writer use BufferedRandom instead.16 2 3 4 Text I O. Base class for text streams This class provides a character and line based interface to stream I O There is no readinto method because Python s character strings are immutable It inherits IOBase There is no public constructor. TextIOBase provides or overrides these data attributes and methods in addition to those from IOBase. The name of the encoding used to decode the stream s bytes into strings, and to encode strings into bytes. The error setting of the decoder or encoder. A string, a tuple of strings, or None indicating the newlines translated so far Depending on the implementation and the initial constructor flags, this may not be available. The underlying binary buffer a BufferedIOBase instance that TextIOBase deals with This is not part of the TextIOBase API and may not exist in some implementations. Separate the underlying binary buffer from the TextIOBase and return it. After the underlying buffer has been detach ed, the TextIOBase is in an unusable state. Some TextIOBase implementations, like StringIO may not have the concept of an underlying buffer and calling this method will raise UnsupportedOperation. New in version 3 1.Read and return at most size characters from the stream as a single str If size is negative or None reads until EOF. Read until newline or EOF and return a single str If the stream is already at EOF, an empty string is returned. If size is specified, at most size characters will be read. Change the stream position to the given offset Behaviour depends on the whence parameter The default value for whence is SEEKSET. SEEKSET or 0 seek from the start of the stream the default offset must either be a number returned by or zero Any other offset value produces undefined behaviour. SEEKCUR or 1 seek to the current position offset must be zero, which is a no-operation all other values are unsupported. SEEKEND or 2 seek to the end of the stream offset must be zero all other values are unsu pported. Return the new absolute position as an opaque number. New in version 3 1 The SEEK constants. Return the current stream position as an opaque number The number does not usually represent a number of bytes in the underlying binary storage. Write the string s to the stream and return the number of characters written. class io TextIOWrapper buffer encoding None errors None newline None linebuffering False writethrough False. A buffered text stream over a BufferedIOBase binary stream It inherits TextIOBase. encoding gives the name of the encoding that the stream will be decoded or encoded with It defaults to. errors is an optional string that specifies how encoding and decoding errors are to be handled Pass strict to raise a ValueError exception if there is an encoding error the default of None has the same effect , or pass ignore to ignore errors Note that ignoring encoding errors can lead to data loss replace causes a replacement marker such as to be inserted where there is malformed dat a backslashreplace causes malformed data to be replaced by a backslashed escape sequence When writing, xmlcharrefreplace replace with the appropriate XML character reference or namereplace replace with N escape sequences can be used Any other error handling name that has been registered with is also valid. newline controls how line endings are handled It can be None n r and r n It works as follows. When reading input from the stream, if newline is None universal newlines mode is enabled Lines in the input can end in n r or r n and these are translated into n before being returned to the caller If it is universal newlines mode is enabled, but line endings are returned to the caller untranslated If it has any of the other legal values, input lines are only terminated by the given string, and the line ending is returned to the caller untranslated. When writing output to the stream, if newline is None any n characters written are translated to the system default line separator, If newline is or n no translation takes place If newline is any of the other legal values, any n characters written are translated to the given string. If linebuffering is True flush is implied when a call to write contains a newline character. If writethrough is True calls to write are guaranteed not to be buffered any data written on the TextIOWrapper object is immediately handled to its underlying binary buffer. Changed in version 3 3 The writethrough argument has been added. Changed in version 3 3 The default encoding is now instead of Don t change temporary the locale encoding using use the current locale encoding instead of the user preferred encoding. TextIOWrapper provides one attribute in addition to those of TextIOBase and its parents. Whether line buffering is enabled. An in-memory stream for text I O The text buffer is discarded when the close method is called. The initial value of the buffer can be set by providing initialvalue If newline translation is enabled, newlines will be encoded as if b y write The stream is positioned at the start of the buffer. The newline argument works like that of TextIOWrapper The default is to consider only n characters as ends of lines and to do no newline translation If newline is set to None newlines are written as n on all platforms, but universal newline decoding is still performed when reading. StringIO provides this method in addition to those from TextIOBase and its parents. Return a str containing the entire contents of the buffer Newlines are decoded as if by read although the stream position is not changed. class io IncrementalNewlineDecoder.16 2 4 Performance. This section discusses the performance of the provided concrete I O implementations.16 2 4 1 Binary I O. By reading and writing only large chunks of data even when the user asks for a single byte, buffered I O hides any inefficiency in calling and executing the operating system s unbuffered I O routines The gain depends on the OS and the kind of I O which is performed For example, o n some modern OSes such as Linux, unbuffered disk I O can be as fast as buffered I O The bottom line, however, is that buffered I O offers predictable performance regardless of the platform and the backing device Therefore, it is almost always preferable to use buffered I O rather than unbuffered I O for binary data.16 2 4 2 Text I O. Text I O over a binary storage such as a file is significantly slower than binary I O over the same storage, because it requires conversions between unicode and binary data using a character codec This can become noticeable handling huge amounts of text data like large log files Also, and are both quite slow due to the reconstruction algorithm used. StringIO however, is a native in-memory unicode container and will exhibit similar speed to BytesIO.16 2 4 3 Multi-threading. FileIO objects are thread-safe to the extent that the operating system calls such as read 2 under Unix they wrap are thread-safe too. Binary buffered objects instances of BufferedReader Buf feredWriter BufferedRandom and BufferedRWPair protect their internal structures using a lock it is therefore safe to call them from multiple threads at once. TextIOWrapper objects are not thread-safe.16 2 4 4 Reentrancy. Binary buffered objects instances of BufferedReader BufferedWriter BufferedRandom and BufferedRWPair are not reentrant While reentrant calls will not happen in normal situations, they can arise from doing I O in a signal handler If a thread tries to re-enter a buffered object which it is already accessing, a RuntimeError is raised Note this doesn t prohibit a different thread from entering the buffered object. The above implicitly extends to text files, since the open function will wrap a buffered object inside a TextIOWrapper This includes standard streams and therefore affects the built-in function print as well.

No comments:

Post a Comment