Python Open Stdout As Binário Opções


Python Files IO Este capítulo abrange todas as funções IO básicas disponíveis no Python. Para obter mais funções, consulte a documentação padrão do Python. Imprimir para a tela A maneira mais simples de produzir saída é usando a instrução print onde você pode passar zero ou mais expressões separadas por vírgulas. Esta função converte as expressões que você passa para uma seqüência de caracteres e grava o resultado na saída padrão da seguinte forma menos Isso produz o seguinte resultado na tela padrão menos Entrada de Teclado de Leitura Python fornece duas funções internas para ler uma linha de texto de entrada padrão, Que por padrão vem do teclado. Estas funções são menos A função rawinput A função rawinput (prompt) lê uma linha da entrada padrão e retorna-a como uma string (removendo a nova linha de saída). Isso solicita que você digite qualquer string e exibirá a mesma string na tela. A função input (prompt) é equivalente a rawinput, exceto que assume que a entrada é uma expressão Python válida e retorna o resultado avaliado para você. Isto produziria o seguinte resultado em relação à entrada introduzida menos Abrir e fechar ficheiros Até agora, tem estado a ler ea escrever na entrada e saída padrão. Agora, veremos como usar arquivos de dados reais. O Python fornece funções e métodos básicos necessários para manipular arquivos por padrão. Você pode fazer a maior parte da manipulação de arquivos usando um objeto de arquivo. A Função aberta Antes que você possa ler ou escrever um arquivo, você tem que abri-lo usando Pythons built-in open () função. Essa função cria um objeto de arquivo, que seria utilizado para chamar outros métodos de suporte associados a ele. Aqui estão os detalhes do parâmetro: filename: O argumento filename é um valor de string que contém o nome do arquivo ao qual você deseja acessar. Accessmode: O modo de acesso determina o modo no qual o arquivo tem de ser aberto, isto é, ler, escrever, acrescentar, etc. Uma lista completa de valores possíveis é dada abaixo na tabela. Este é um parâmetro opcional eo modo de acesso de arquivo padrão é lido (r). Buffering: Se o buffering valor é definido como 0, não buffering ocorre. Se o valor de buffer é 1, o buffer de linha é executado ao acessar um arquivo. Se você especificar o valor de buffer como um inteiro maior que 1, a ação de buffer será executada com o tamanho de buffer indicado. Se negativo, o tamanho do buffer é o padrão do sistema (comportamento padrão). Aqui está uma lista dos diferentes modos de abrir um arquivo menos7. Entrada e Saída Existem várias maneiras de apresentar a saída de um programa de dados podem ser impressos em uma forma legível por humanos, ou gravados em um arquivo para uso futuro. Este capítulo discutirá algumas das possibilidades. 7.1. Formatação de saída Fancier Até agora we8217ve encontrou duas maneiras de escrever valores: expressões de expressão e declaração de impressão. (Uma terceira via está usando o método write () de objetos de arquivo, o arquivo de saída padrão pode ser referenciado como sys. stdout. Consulte a Referência da Biblioteca para obter mais informações sobre isso.) Muitas vezes você deseja mais controle sobre a formatação de sua saída do que simplesmente Imprimir valores separados por espaços. Há duas maneiras de formatar sua saída a primeira maneira é fazer toda a manipulação de seqüência de caracteres usando seqüência de caracteres fatiar e operações de concatenação você pode criar qualquer layout que você pode imaginar. Os tipos de cadeia têm alguns métodos que executam operações úteis para cadeias de preenchimento para uma determinada largura de coluna, estes serão discutidos em breve. A segunda maneira é usar o método str. format (). O módulo string contém uma classe Template que oferece ainda outra maneira de substituir valores em strings. Uma pergunta permanece, naturalmente: como você converte valores às cordas Felizmente, Python tem maneiras converter todo o valor a uma corda: passe-o às funções do repr () ou do str (). A função str () destina-se a retornar representações de valores que são razoavelmente legíveis, enquanto que repr () pretende gerar representações que podem ser lidas pelo interpretador (ou forçará um SyntaxError se não houver nenhuma sintaxe equivalente). Para objetos que não possuem uma representação particular para consumo humano, str () retornará o mesmo valor que repr (). Muitos valores, como números ou estruturas como listas e dicionários, têm a mesma representação usando qualquer função. As cadeias de caracteres e os números de ponto flutuante, em particular, têm duas representações distintas. Aqui estão duas maneiras de escrever uma tabela de quadrados e cubos: (Observe que no primeiro exemplo, um espaço entre cada coluna foi adicionado pelo modo como a impressão funciona: sempre adiciona espaços entre os argumentos.) Este exemplo demonstra o str. rjust () De objetos string, que justifica à direita uma seqüência de caracteres em um campo de uma determinada largura, preenchendo-o com espaços à esquerda. Existem métodos semelhantes str. ljust () e str. center (). Esses métodos não escrevem nada, eles apenas retornam uma nova seqüência de caracteres. Se a seqüência de caracteres de entrada é muito longa, eles não o truncam, mas devolvê-lo inalterado, isso vai arruinar o layout de sua coluna, mas geralmente é melhor do que a alternativa, que estaria mentindo sobre um valor. (Se você realmente quer truncamento você sempre pode adicionar uma operação de fatia, como em x. ljust (n): n.) Existe um outro método, str. zfill (). Que pads uma seqüência numérica à esquerda com zeros. Ele compreende os sinais mais e menos: O uso básico do método str. format () se parece com isto: Os colchetes e os caracteres dentro deles (chamados campos de formato) são substituídos pelos objetos passados ​​para o método str. format (). Um número entre colchetes refere-se à posição do objeto passado para o método str. format (). Se argumentos de palavra-chave são usados ​​no método str. format (), seus valores são referidos usando o nome do argumento. Os argumentos posicionais e de palavras-chave podem ser combinados arbitrariamente: 7.2. Leitura e gravação de arquivos open () retorna um objeto de arquivo, e é mais comumente usado com dois argumentos: open (nome de arquivo, modo). O primeiro argumento é uma string contendo o nome do arquivo. O segundo argumento é outra seqüência contendo alguns caracteres descrevendo a maneira em que o arquivo será usado. Modo pode ser r quando o arquivo só será lido, w para apenas escrever (um arquivo existente com o mesmo nome será apagado), e a abre o arquivo para acrescentar qualquer dados escritos para o arquivo é automaticamente adicionado ao final. R abre o arquivo para leitura e escrita. O argumento mode é opcional r será assumido se it8217s omitido. No Windows, b anexado ao modo abre o arquivo no modo binário, então também existem modos como rb. Wb. E rb. Python no Windows faz uma distinção entre texto e arquivos binários os caracteres de fim de linha em arquivos de texto são alterados um pouco quando os dados são lidos ou gravados. Esta modificação por trás dos bastidores dos dados de arquivos é ótima para arquivos de texto ASCII, mas corrompe dados binários como os arquivos JPEG ou EXE. Tenha muito cuidado para usar o modo binário ao ler e gravar esses arquivos. No Unix, ele doesn8217t ferir anexar um b para o modo, para que você possa usá-lo de forma independente de plataforma para todos os arquivos binários. 7.2.1. Métodos de objetos de arquivo O restante dos exemplos nesta seção assumirá que um objeto de arquivo chamado f já foi criado. Para ler o conteúdo de um arquivo, chame f. read (size). Que lê alguma quantidade de dados e retorna como uma string. Size é um argumento numérico opcional. Quando o tamanho é omitido ou negativo, todo o conteúdo do arquivo será lido e retornado seu problema se o arquivo for duas vezes maior que a memória da máquina. Caso contrário, na maioria dos bytes de tamanho são lidos e retornados. Se o final do arquivo for atingido, f. read () retornará uma string vazia (quotquot). F. readline () lê uma única linha do arquivo um caractere de nova linha (n) é deixado no final da seqüência, e só é omitido na última linha do arquivo se o arquivo doesn8217t terminar em uma nova linha. Isso torna o valor de retorno inequívoco se f. readline () retorna uma seqüência vazia, o final do arquivo foi atingido, enquanto uma linha em branco é representada por n. Uma string contendo apenas uma nova linha. Para ler linhas de um arquivo, você pode fazer um loop sobre o objeto de arquivo. Esta é a memória eficiente, rápida e leva a código simples: Se você quiser ler todas as linhas de um arquivo em uma lista você também pode usar lista (f) ou f. readlines (). F. write (string) grava o conteúdo da string no arquivo, retornando None. Para escrever algo diferente de uma string, ele precisa ser convertido em uma string primeiro: f. tell () retorna um inteiro que dá ao arquivo object8217s posição atual no arquivo, medido em bytes desde o início do arquivo. Para alterar a posição do arquivo object8217s, use f. seek (offset, fromwhat). A posição é calculada a partir da adição de offset a um ponto de referência, o ponto de referência é selecionado pelo argumento fromwhat. Um valor fromwhat de 0 medidas a partir do início do arquivo, 1 usa a posição do arquivo atual e 2 usa o final do arquivo como o ponto de referência. Fromwhat pode ser omitido e padrão para 0, usando o início do arquivo como o ponto de referência. Quando terminar com um arquivo, chame f. close () para fechá-lo e liberar quaisquer recursos do sistema ocupados pelo arquivo aberto. Depois de chamar f. close (). As tentativas de usar o objeto de arquivo falharão automaticamente. É uma boa prática usar a palavra-chave com quando se lida com objetos de arquivo. Isso tem a vantagem de que o arquivo está devidamente fechado após a conclusão da suíte, mesmo que uma exceção seja aumentada no caminho. É também muito mais curto do que escrever equivalente try - finally blocks: Os objectos de ficheiros têm alguns métodos adicionais, tais como isatty () e truncate () que são menos utilizados consultar a Referência da Biblioteca para obter um guia completo para os objectos de ficheiro. 7.2.2. Salvar dados estruturados com json Strings pode ser facilmente gravado e lido em um arquivo. Os números demoram um pouco mais de esforço, uma vez que o método read () retorna apenas strings, que terão de ser passadas para uma função como int (). Que recebe uma seqüência de caracteres como 123 e retorna seu valor numérico 123. Quando você deseja salvar tipos de dados mais complexos como listas aninhadas e dicionários, analisar e serializar manualmente torna-se complicado. Ao invés de ter usuários constantemente escrevendo e depurando código para salvar tipos de dados complicados para arquivos, Python permite que você use o popular formato de intercâmbio de dados chamado JSON (JavaScript Object Notation). O módulo padrão chamado json pode ter hierarquias de dados Python, e convertê-las em representações de string, este processo é chamado de serialização. Reconstruindo os dados da representação de string é chamado deserializing. Entre serialização e desserialização, a seqüência que representa o objeto pode ter sido armazenada em um arquivo ou dados, ou enviada através de uma conexão de rede para alguma máquina distante. O formato JSON é comumente usado por aplicativos modernos para permitir a troca de dados. Muitos programadores já estão familiarizados com ele, o que torna uma boa escolha para a interoperabilidade. Se você tiver um objeto x. Você pode exibir sua representação de seqüência de caracteres JSON com uma linha simples de código: Outra variante da função dumps (), chamada dump (). Simplesmente serializa o objeto em um arquivo. Portanto, se f é um objeto de arquivo aberto para escrita, podemos fazer isto: Para decodificar o objeto novamente, se f é um objeto de arquivo que foi aberto para leitura: Esta técnica de serialização simples pode lidar com listas e dicionários, mas serializar instâncias de classe arbitrárias Em JSON requer um pouco de esforço extra. A referência para o módulo json contém uma explicação para isso. Pickle - o módulo pickle Contrariamente ao JSON. Pickle é um protocolo que permite a serialização de objetos Python arbitrariamente complexos. Como tal, é específico para Python e não pode ser usado para se comunicar com aplicativos escritos em outros idiomas. Também é inseguro por padrão: desserializar dados pickle provenientes de uma fonte não confiável pode executar código arbitrário, se os dados foram criados por um atacante habilidoso. Linha de comando e ambiente 1.1.1. Opções de interface A interface do interpretador se assemelha à do shell UNIX, mas fornece alguns métodos adicionais de invocação: Quando chamado com entrada padrão conectada a um dispositivo tty, ele solicita comandos e os executa até que um EOF (um caractere de fim de arquivo, Você pode produzir isso com Ctrl-D no UNIX ou Ctrl-Z, Enter no Windows) é lido. Quando chamado com um argumento de nome de arquivo ou com um arquivo como entrada padrão, ele lê e executa um script desse arquivo. Quando chamado com um argumento de nome de diretório, ele lê e executa um script apropriadamente nomeado desse diretório. Quando chamado com o comando - c. Ele executa a instrução Python (s) dada como comando. Aqui o comando pode conter várias instruções separadas por novas linhas. Liderar espaços em branco é significativo nas instruções Python Quando chamado com - m nome-módulo. O módulo fornecido está localizado no caminho do módulo Python e executado como um script. No modo não interativo, toda a entrada é analisada antes de ser executada. Uma opção de interface encerra a lista de opções consumidas pelo interpretador, todos os argumentos consecutivos terminam em sys. argv 8211 note que o primeiro elemento, subscrito zero (sys. argv0), é uma string que reflete a fonte do programa8217s. Execute o código Python no comando. Comando pode ser uma ou mais instruções separadas por novas linhas, com espaço em branco significativo como no código do módulo normal. Se essa opção for dada, o primeiro elemento de sys. argv será quot-cquot e o diretório atual será adicionado ao início de sys. path (permitindo que módulos nesse diretório sejam importados como módulos de nível superior). Procure sys. path para o módulo nomeado e execute seu conteúdo como o módulo principal. Como o argumento é um nome de módulo, você não deve dar uma extensão de arquivo (.py). O nome do módulo deve ser um nome de módulo Python válido, mas a implementação nem sempre pode forçar isso (por exemplo, pode permitir que você use um nome que inclua um hífen). Os nomes de pacotes também são permitidos. Quando um nome de pacote é fornecido em vez de um módulo normal, o interpretador executará ltpkggt. main como o módulo principal. Esse comportamento é deliberadamente semelhante ao manipulação de diretórios e zipfiles que são passados ​​para o interpretador como o argumento de script. Esta opção não pode ser utilizada com módulos incorporados e módulos de extensão escritos em C, uma vez que não têm ficheiros de módulo Python. No entanto, ele ainda pode ser usado para módulos pré-compilados, mesmo se o arquivo de origem original não estiver disponível. Se esta opção for dada, o primeiro elemento de sys. argv será o caminho completo para o arquivo de módulo. Como com a opção - c, o diretório atual será adicionado ao início de sys. path. Muitos módulos de biblioteca padrão contêm código que é invocado em sua execução como um script. Um exemplo é o módulo timeit: PEP 370 8211 Por usuário diretório de pacotes de site Desabilite a importação do site do módulo e as manipulações dependentes do site do sys. path que isso acarreta. Emita um aviso quando um arquivo de origem mescla abas e espaços para o recuo de uma maneira que o torna dependente do valor de uma guia expressa em espaços. Emitir um erro quando a opção é dada duas vezes (-tt). Forçar stdin, stdout e stderr para ser totalmente unbuffered. Em sistemas onde importa, também colocar stdin, stdout e stderr em modo binário. Observe que há buffer interno em file. readlines () e File Objects (para linha em sys. stdin) que não é influenciado por esta opção. Para contornar isso, você vai querer usar file. readline () dentro de um while 1: loop. Imprimir uma mensagem cada vez que um módulo é inicializado, mostrando o local (nome do arquivo ou módulo incorporado) do qual ele é carregado. Quando dado duas vezes (-vv), imprima uma mensagem para cada arquivo que é marcado para quando procurar um módulo. Também fornece informações sobre a limpeza do módulo na saída. Veja também PYTHONVERBOSE. Controle de advertência. Por padrão, o mecanismo de advertência do Python8217 imprime mensagens de aviso ao sys. stderr. Uma mensagem de aviso típica tem a seguinte forma: Por padrão, cada aviso é impresso uma vez para cada linha de origem onde ele ocorre. Essa opção controla a freqüência com que os avisos são impressos. Várias opções - W podem ser fornecidas quando um aviso corresponde a mais de uma opção, a ação para a última opção correspondente é executada. As opções - W inválidas são ignoradas (no entanto, uma mensagem de aviso é impressa sobre opções inválidas quando o primeiro aviso é emitido). A partir do Python 2.7, DeprecationWarning e seus descendentes são ignorados por padrão. A opção - Wd pode ser usada para reativá-los. Os avisos também podem ser controlados a partir de um programa Python usando o módulo de avisos. A forma mais simples de argumento é uma das seguintes strings de ação (ou uma única abreviação) por si mesmas: ignore Ignore all warnings. Default Explicitamente solicite o comportamento padrão (impressão de cada aviso uma vez por linha de origem). Todos Imprime um aviso sempre que ocorre (isso pode gerar muitas mensagens se um aviso for disparado repetidamente para a mesma linha de origem, como dentro de um loop). Module Imprimir cada advertência apenas a primeira vez que ocorre em cada módulo. Uma vez Imprima cada advertência apenas na primeira vez que ocorrer no programa. Erro Aumentar uma exceção em vez de imprimir uma mensagem de aviso. A forma completa do argumento é: Aqui, a ação é como explicado acima, mas só se aplica a mensagens que correspondem aos campos restantes. Os campos vazios correspondem a todos os valores. Os campos vazios podem ser omitidos. O campo de mensagem corresponde ao início da mensagem de aviso impresso este jogo é insensível a maiúsculas e minúsculas. O campo categoria corresponde à categoria de aviso. Este deve ser um nome de classe, o teste de correspondência se a categoria de aviso real da mensagem é uma subclasse da categoria de aviso especificada. O nome completo da classe deve ser dado. O campo do módulo corresponde ao nome do módulo (totalmente qualificado), este jogo faz distinção entre maiúsculas e minúsculas. O campo de linha corresponde ao número da linha, onde zero corresponde a todos os números de linha e é, portanto, equivalente a um número de linha omitido. Advertências 8211 o módulo de avisos PEP 230 8211 Quadro de advertência Ignore a primeira linha da fonte, permitindo o uso de formas não-Unix de cmd. Isto destina-se apenas a um hack específico do DOS. Os números de linha em mensagens de erro serão desativados por um. Avisar sobre possíveis incompatibilidades do Python 3.x, emitindo um DeprecationWarning para recursos que são removidos ou alterados significativamente no Python 3. Novo na versão 2.6. 1.1.4. Opções que você não deve usar Reservado para uso pelo Jython. Transforma todos os literais de string em unicode globalmente. Não se sinta tentado a usar esta opção, pois provavelmente quebrará o seu mundo. Também produz arquivos. pyc com um número mágico diferente do normal. Em vez disso, você pode habilitar literais unicode em uma base por módulo usando: na parte superior do arquivo. Veja detalhes futuros no futuro. Reservado para implementações alternativas de Python para usar para seus próprios fins. 1.2. Variáveis ​​de ambiente Estas variáveis ​​de ambiente influenciam o comportamento do Python8217s, são processadas antes das opções da linha de comandos que não sejam - E. É costume que as opções de linha de comando substituem variáveis ​​ambientais onde há um conflito. Altere a localização das bibliotecas padrão do Python. Por padrão, as bibliotecas são pesquisadas em prefixo libpython versão e execprefix libpython versão. Onde prefix e execprefix são diretórios dependentes da instalação, ambos padrão para usrlocal. Quando PYTHONHOME é definido como um único diretório, seu valor substitui prefixo e execprefix. Para especificar valores diferentes para estes, defina PYTHONHOME como prefixo. Execprefix. Aumentar o caminho de pesquisa padrão para arquivos de módulo. O formato é o mesmo que o shell8217s PATH. Um ou mais nomes de caminho de diretório separados por os. pathsep (por exemplo, dois pontos em Unix ou ponto-e-vírgula no Windows). Os diretórios inexistentes são silenciosamente ignorados. Além dos diretórios normais, as entradas PYTHONPATH individuais podem referir-se a arquivos zip contendo módulos Python puros (na fonte ou no formulário compilado). Os módulos de extensão não podem ser importados de arquivos zip. O caminho de pesquisa padrão é dependente da instalação, mas geralmente começa com o prefixo libpython versão (veja PYTHONHOME acima). É sempre anexado a PYTHONPATH. Um diretório adicional será inserido no caminho de busca na frente de PYTHONPATH como descrito acima em Opções de interface. O caminho de pesquisa pode ser manipulado a partir de um programa Python como a variável sys. path. Se este for o nome de um arquivo legível, os comandos Python desse arquivo serão executados antes que o primeiro prompt seja exibido no modo interativo. O arquivo é executado no mesmo namespace onde os comandos interativos são executados para que os objetos definidos ou importados nele possam ser usados ​​sem qualificação na sessão interativa. Você também pode alterar os prompts sys. ps1 e sys. ps2 neste arquivo. Defina isso como uma seqüência não vazia para fazer com que o módulo de tempo exija datas especificadas como strings para incluir anos de 4 dígitos, caso contrário, os anos de 2 dígitos são convertidos com base nas regras descritas na documentação do módulo de tempo. Se esta estiver definida para uma cadeia não vazia, é equivalente a especificar a opção - O. Se definido como um número inteiro, é equivalente a especificar - O várias vezes. Se esta estiver definida para uma cadeia não vazia, é equivalente a especificar a opção - d. Se definido como um número inteiro, é equivalente a especificar - d várias vezes. Se esta estiver definida para uma cadeia não vazia, é equivalente a especificar a opção - i. Essa variável também pode ser modificada pelo código Python usando o os. environ para forçar o modo de inspeção no término do programa. Se esta estiver definida para uma cadeia não vazia, é equivalente a especificar a opção - u. Se esta estiver definida para uma cadeia não vazia, é equivalente a especificar a opção - v. Se definido como um número inteiro, é equivalente a especificar - v várias vezes. Se isso for definido, o Python ignora casos em declarações de importação. Isso só funciona no Windows, OS X, OS2 e RiscOS. Se isso for definido, o Python won8217t tentará gravar arquivos. pyc ou. pyo na importação de módulos de origem. Isso equivale a especificar a opção - B. Novo na versão 2.6. Se esta variável for definida como aleatória. O efeito é o mesmo que especificar a opção - R: um valor aleatório é usado para semear os hashes de str, bytes e objetos datetime. Se PYTHONHASHSEED é definido como um valor inteiro, ele é usado como uma semente fixa para gerar o hash () dos tipos cobertos pela hash randomization. Sua finalidade é permitir o hash repetível, tal como para selftests para o próprio intérprete, ou permitir que um aglomerado de processos de python compartilhe valores de hash. O número inteiro deve ser um número decimal no intervalo 0,4294967295. Especificar o valor 0 levará aos mesmos valores de hash quando a hash randomization estiver desativada. Novo na versão 2.6.8. Substitui a codificação usada para stdinstdoutstderr, na sintaxe encodingname: errorhandler. A parte: errorhandler é opcional e tem o mesmo significado que em str. encode (). Novo na versão 2.6. PEP 370 8211 Por usuário diretório sites-packages Se esta variável de ambiente é definida, sys. argv0 será definido como seu valor em vez do valor obtido através do tempo de execução C. Só funciona no Mac OS X. Isto é equivalente à opção - W. Se definido como uma seqüência de caracteres separada por vírgulas, é equivalente a especificar - W várias vezes. Se essa variável de ambiente é definida especificamente para 0. então é equivalente a chamar implicitamente ssl. httpsverifycertificates () com enableFalse quando ssl é importado pela primeira vez. Consulte a documentação de ssl. httpsverifycertificates () para obter detalhes. Novo na versão 2.7.12. 1.2.1. Variáveis ​​de modo de depuração A definição dessas variáveis ​​somente tem um efeito em uma compilação de depuração do Python, ou seja, se o Python foi configurado com a opção de compilação --with-pydebug. Se configurado, o Python imprimirá informações de depuração de threading. Alterado na versão 2.6: Anteriormente, essa variável foi chamado THREADDEBUG. Se definido, o Python irá descarregar objetos e as contagens de referência ainda estarão vivas depois de desligar o interpretador. Se definido, o Python imprimirá as estatísticas de alocação de memória toda vez que uma nova arena de objetos for criada e no desligamento.

Comments