Textdateiverarbeitung in Python (Textdateiverarbeitung in Python), Lektion, Seite 723889
https://www.purl.org/stefan_ram/pub/textdateiverarbeitung_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Dateiverarbeitung in Python 

Schreiben einer Datei

Ausgabe einer Textdatei
with open( 'tmp.txt', 'r' )as file: print( file.read() )
Lesen einer Zeile

line = file.readline()

for line in file: # enthält Zeilenende

Lesen aller Zeilen
lines = ''.join( file.readlines() )
Schreiben

file.write( 'txt' )

file.writelines( list )

Unterschiede zu »print«:

Anhängen
fh = open("Hello.txt", "a")
main.py

with open( 'output.txt', 'w' ) as file:

file.write( 'text' )

print( 'example', file=f, flush=True )

main.py

file = open( 'output.txt', 'w' )

file.write( 'text' )

print( 'more text', file=f )

file.close()

main.py

from contextlib import redirect_stdout

file = open( 'output.txt', 'w' )

with redirect_stdout( file ):

print( 'example' )

Beispiel

Eine Datei »quelle.txt« soll ausgegeben werden, aber ohne die Zeilen aus der Datei »stopp.txt«.

quelle.txt
Anton
Dora
Heinrich
Nordpol
Berta
stopp.txt
Nordpol
Dora
main.py

import fileinput

quelle = fileinput.input( 'quelle.txt' )

stopp = list( fileinput.input( 'stopp.txt' ))

ergebnis =[ zeile for zeile in quelle if zeile not in stopp ]

for zeile in ergebnis: print( end=zeile )

Beispiel

Eine Datei mit Zeilen, die aus einem Text und einem durch ein Komma abgetrennten Numerale bestehen, soll nach den Zahlenwerte der Numeralia sortiert werden.

input.txt
zeta,20
alpha,30
beta,10
main.py

import fileinput

a = list( fileinput.input( 'input.txt' )) # Einlesen

a.sort( key = lambda line: int( line.split( ',' )[ 1 ])) # Verarbeiten

for line in a: print( end=line ) # Ausgeben

Übersetzungshinweise
input  Eingabe
key  Schlüssel (Sortierschlüssel)
line  Zeile
to split  Aufteilen, Zerlegen
Ausgabe (Bildschirm)
beta,10
zeta,20
alpha,30

Bei dieser einfachen Lösung darf die Quelldatei keine Leerzeilen enthalten, aber muß mit einem Zeilenende enden.

Richtige Eingabe mit sichtbar gemachten Zeilenenden
zeta,20↵
beta,10↵
Falsche Eingabe (ein Zeilenende zuviel)
zeta,20↵
beta,10↵
Falsche Eingabe (ein Zeilenende zuwenig)
zeta,20↵
beta,10

Beispiel

main.py

import fileinput

import re

for line in fileinput.input():

line = re.sub( '`(.*)`', lambda x: eval( x.group( 1 )), line.rstrip())

print( line )

input:
puts("`'*'*50`");
output:
puts("**************************************************");

Beispiel

main.py

import os

with open( 'tmp.cmd', 'w' ) as file:

print \

( \

# program

r'ECHO '

# example

r'EXAMPLE '

, file=file, flush=True )

print( 'PAUSE', file=file, flush=True )

os.system("C:\Windows\System32\cmd.exe /k tmp.cmd")

input()

Beispiel

Schreiben eines CHRS-Chunks (IFF) in eine Binärdatei.

main.py

class chunk():

def __init__( my, type=None, size=None ):
my.type = type
my.size = size

class chunk_CHRS( chunk ):

class size_too_large( Exception ):
pass

class unprepared_write_attempt( Exception ):
pass

class no_text_given( Exception ):
pass

def __init__( my, text=None ):
chunk.__init__( my, b'CHRS', None )
my.set_text( text )

def set_text( my, text=None ):
my.text = text
my.data = None
my.prepared = False

def prepare_for_writing( my ):
if my.text == None: raise no_text_given()
my.data = my.text.encode( 'utf-8' )
l = len( my.data )
if l > 2**32-1: raise size_too_large()
my.size = l
my.prepared = True

def write_to_file( my, file ):
if not my.prepared: raise unprepared_write_attempt()
if my.size > 2**32-1: raise size_too_large()
file.write( my.type )
file.write( my.size.to_bytes( 4, byteorder='big', signed=False ))
file.write( my.data )

def write_CHRS( file, text ):
chunk = chunk_CHRS( text )
chunk.prepare_for_writing()
chunk.write_to_file( file )

with open( 'test20181214215507.txt', 'wb' ) as file:

write_CHRS( file, 'example' )

import chunk

with open( 'test20181214215507.txt', 'rb' ) as file:

c = chunk.Chunk( file )

print( c.getname() )

print( c.getsize() )

print( c.read( c.getsize() ))

c.close()

transcript
b'CHRS'
7
b'example'

Gruppieren

main.py

tmpfilename = 'tmp20190430143402DML.txt'

with open( tmpfilename, 'w' )as file:
file.write( '''1 John
1 Erik
1 Simon
2 Alex
2 Suse
3 Paul
3 Matze
3 Katrin
3 Dani
''' )

from collections import defaultdict

d = defaultdict( list )

with open( tmpfilename, 'r' ) as sourcefile:
for line in sourcefile:
l = line.split( ' ' )
d[ l[ 0 ]].append( l[ 1 ][ :-1 ])

for key in d:
print( key, ' '.join( d[ key ] ))

transcript

1 John Erik Simon

2 Alex Suse

3 Paul Matze Katrin Dani

Logfile auswerten

"URI","referrer"

"URI","referrer"

"URI","referrer"

referrer zusammenfassen und nach Häufigkeit sortiert ausgeben

import operator

import re

import sys

from collections import Counter

referrers = Counter()

def f( matcher ):

URI = matcher.group( 1 )

referrer = matcher.group( 2 )

referrers[ referrer ]+= 1

n = 0

with open( r'logfile.txt', 'rb' )as logfile:

for logline in logfile:

n += 1

s = re.sub( rb'"([^"]*)",'*2, f, logline + b"," )

if n % 100000 == 0: print(n)

for( i, j )in sorted( Referrers.items(), key=operator.itemgetter( 1 ), reverse=True ):

print( j, i )

Suchen und Ersetzen in binärer Datei

with open( "transcript.txt", "rb" )as f:

d = f.read()

d = d.replace( b"\x0D\x0A", b"\x0B" )

with open( "transcript.txt", "wb" )as f:

f.write(content)

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723889 stefan_ram:723889 Textdateiverarbeitung in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723889, slrprddef723889, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/textdateiverarbeitung_python