Gå til innhold

Anbefalte innlegg

Hei,

 

Holder på med å lage et Python-skript (og kanskje program senere) som leser gjennom et filtre og søker etter data i tekstfiler. Noen som har gjort det tidligere? Har bladd litt i Python Essential Reference, men har ikke funnet helt hva jeg er ute etter. Har programmert en del, men er litt fersk i Python. Har fått med meg at man kan få veldig bra kode om man bruker de rette funksjonene.

 

Så også etter systemfunksjoner som virker i Python-skall. Fins det noe tilsvarende som cd, ls, cat, osv. hvis man vil prøve seg fram?

Lenke til kommentar
Videoannonse
Annonse

Da går det greit å lese filer.

 

Fins det noen gode måter å samle info fra dem? Går på mønstergjenkjenning.

projectfile = open(fullpath)
for line in projectfile.readlines():
if line.startswith('File'):
	# Hver linje som starter med 'File' definerer 
	# en C-fil i prosjektet. Jeg vil ha navnet
	# Eks: File 1,1,<.\main.c><main.c>

startswith er OK har da filen er generert, men jeg bruker endswith på filendelser. Finnes det noe bedre for Windows da det ikke er case-sens? Eller er det å sette til lower case først som er trikset?

Endret av Feynman
Lenke til kommentar
Da går det greit å lese filer.

 

Fins det noen gode måter å samle info fra dem? Går på mønstergjenkjenning.

 

Mao du trenger en funksjon som trekker alle filnavn ut av en fil, og så vil du anvende denne funksjonen på en sekvens med filer. Omtrent slik, kanskje:

 

def extract_files(fname):
"""Extract all filenames out of L{fname}.

Extract all file namees from lines starting with 'File'. Each
interesting line is formatted thus:

File [number],[number],[path]

@type fname: basestring
@param fname:
  Filename with data to process

@rtype: list (of basestring)
@return:
  A list (without duplicates) with file names extracted from L{fname}.
"""
marker = "File"

result = set()
for line in open(fname):
if not line.startswith(marker):
	continue

path = line.split(",")[-1].strip()
basename = os.path.basename(path)
name = os.path.splitext(basename)[0]
result.add(name)

return list(result)
# end extract_files


def fetch_all_files(dirname):
"""Fetch all project files listed in files in dirname.
"""

reduce(lambda seq1, seq2: seq1 + seq2,
   [extract_files(x)
	for x in os.listdir(dirname)
	if os.path.isfile(x)])
# end fetch_all_files

 

(Koden er utestet). Uttrekk av filnavnet er nokså simplistisk, men det er vanskelig å gi en oppskrift uten en skikkelig beskrivelse av formatet. Mao. - "left as an exercise for the reader".

 

startswith er OK har da filen er generert, men jeg bruker endswith på filendelser. Finnes det noe bedre for Windows da det ikke er case-sens? Eller er det å sette til lower case først som er trikset?

 

"Windows er ikke case-sens"? Eh?

 

Uansett, hvis input kan forekommer i flere varianter, er nok det lureste å velge *en* intern representasjon og sørge for at *alt* blir konvertert til denne interne representasjonen ved innlesing. Mao. små bokstaver, hvis det er nødvendig (overgang store -> små bokstaver er litt kjipe i det generelle tilfellet, men kanskje det er tilstrekkelig med noe enkelt her).

Lenke til kommentar
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...