Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Avatar
pgarsky
Člen
Avatar
pgarsky:20. května 22:14

Ahoj,
píšu si script pro upravování TXT souborů (viz kód níže).
Pro otevření souboru používám příkaz os.startfile() a potřebuji poradit, jak kontrolovat, zda je soubor ještě otevřený a v případě zavření mít možnost provést blok dalších příkazů.

Zkusil jsem:

#!/usr/bin/env python3

import os
import base64

f = "info.txt"
temp = "temp.txt"

if os.path.exists(f):
    info = open(f, 'r')
    text = base64.b64decode(info.read()).decode('UTF-8')
    #create temporary file and open it

    with open(temp, 'w') as temp:
        #write text from info to temporary file
        temp.write(text)
        #open temporary file
        tempFile = os.startfile("temp.txt")
        #while ... is not closed ... write ... else ... encode and save to info (rewrite)
        #delete temporary file
    #<end script>

Chci docílit: Jak tedy kontrolovat, zda soubor nebyl zavřen klasickým křížkem ve Windows?

Děkuji.

Odpovědět 20. května 22:14
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Odpovídá na pgarsky
Erik Šťastný:21. května 8:28

Ahoj, nevím co myslíš tím "zda soubor nebyl zavřen klasickým křížkem ve Windows?" Myslíš zavření jiné aplikace, která má soubor otevřený?

Mimochodem měl by jsi sjednotit otevírání souborů.

  • open(f, 'r')
  • with open(temp, 'w')
 
Nahoru Odpovědět 21. května 8:28
Avatar
Odpovídá na Erik Šťastný
Michal Haňáček:21. května 9:59

Jen doplnim, ze "with open" drzi soubor otevreny az do konce bloku ... to je mozna odpoved na otazku pgarsky

Nahoru Odpovědět  +1 21. května 9:59
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
pgarsky
Člen
Avatar
Odpovídá na Erik Šťastný
pgarsky:21. května 18:03

Ano, přesně tak to myslím.

Jak sjednotit?

Nahoru Odpovědět 21. května 18:03
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Odpovídá na pgarsky
Erik Šťastný:21. května 18:35

Používáte dva způsoby, které jsou určeny na stejnou věc, rozdíl řekl Michal.

Doporučuju vždy používat

with open()
 
Nahoru Odpovědět 21. května 18:35
Avatar
pgarsky
Člen
Avatar
Odpovídá na Erik Šťastný
pgarsky:21. května 19:09

A jak je myšleno to sjednocení? Takhle?

#!/usr/bin/env python3

import os
import base64

f = "info.txt"
temp = "temp.txt"

if os.path.exists(f):
    #create temporary file and open it
    with open(temp, 'w') as temp:
        info = open(f, 'r')
        text = base64.b64decode(info.read()).decode('UTF-8')
        #write text from info to temporary file
        temp.write(text)
        #open temporary file
        tempFile = os.startfile("temp.txt")
        #while ... is not closed ... write ... else ... encode and save to info (rewrite)
        #delete temporary file
    #<end script>
Nahoru Odpovědět 21. května 19:09
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Odpovídá na pgarsky
Michal Haňáček:22. května 6:56

Ne. Ty používáš dvě konstrukce pro tu stejnou věc s tím že jenom atributem říkáš, že jeden soubor otevíráš pro čtení a druhý pro zápis (

open(f, 'r')

a

with open(temp, 'w')

). Pokud otevíráš soubor přes první konstrukci (open), tak by jsi celý ten kód měl volat v try-finally bloku, kde v části finally soubor uzavřes. Když použiješ druhou konstrukci (with open) tak blok try finally dělat nemusíš, protože se to děje automaticky.

Čili upravený kód by mohl vypadat např takto

#!/usr/bin/env python3

import os
import base64

f = "info.txt"
temp = "temp.txt"

if os.path.exists(f):
    with open(f, 'r') as input:
        text = base64.b64decode(input.read()).decode('UTF-8')

    #create temporary file and open it
    with open(temp, 'w') as temp:
        #write text from info to temporary file
        temp.write(text)
        #open temporary file
        tempFile = os.startfile("temp.txt")
        #while ... is not closed ... write ... else ... encode and save to info (rewrite)
        #delete temporary file
    #<end script>

Případně bloky do sebe vhodně zanořit s ohledem na to co vlastně děláš, nebo co má výt výsledkem.

Snad to má hlavu, patu a pomohl jsem ti alespoň trochu.

Pozn. kód jsem upravoval v browseru, s největší pravděpodobností bude nevalidní ...

Nahoru Odpovědět 22. května 6:56
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
pgarsky
Člen
Avatar
Odpovídá na Michal Haňáček
pgarsky:22. května 21:10

Děkuji. A jak tedy mohu kontrolovat, zda je otevřená aplikace, ve které jsem ten TXT soubor otevřel?

Nahoru Odpovědět 22. května 21:10
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Odpovídá na pgarsky
Michal Haňáček:23. května 6:36

To přeci kontrolovat nemusíš ... nebo jsem možná nepochopil čeho chceš docílit, ale zatím z toho mám dojem že sám sobě trochu házíš klacky pod nohy.

Nahoru Odpovědět 23. května 6:36
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
pgarsky
Člen
Avatar
Odpovídá na Michal Haňáček
pgarsky:24. května 16:27

Je nemluvím o otevření souboru pomocí open(), já myslím otevření souboru pomocí os.startfile()

Nahoru Odpovědět 24. května 16:27
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Odpovídá na pgarsky
Michal Haňáček:24. května 17:10

Pockej, ted tomu asi nerozumim. Ty chces po systemu aby ti otevral soubor, ktery sam drzis pro zapis? A kontrolovat jestli je jeste otevreny?

Jestli jsem to pochopil spravne, tak se obavam se ze to takhle jednoduse neudelas ... a odpoved na to co se ptas se da zjistit do minuty mrknutim do dokumentace , kde se pise

startfile() returns as soon as the associated application is launched. There is no option to wait for the application to close, and no way to retrieve the application’s exit status.

Nahoru Odpovědět 24. května 17:10
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
pgarsky
Člen
Avatar
Odpovídá na Michal Haňáček
pgarsky:24. května 17:54

A nějaká jiná možnost není? Třeba s použitím jiného příkazu, než startfile() ?

Nahoru Odpovědět 24. května 17:54
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Odpovídá na pgarsky
Michal Haňáček:24. května 18:49

Muzes mi prosim nejak popsat (klidne SZ pokud se ti nechce sem) co od toho kodu vlastne chces a proc, treba nejake reseni najdeme.

Nahoru Odpovědět 24. května 18:49
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
pgarsky
Člen
Avatar
Odpovídá na Michal Haňáček
pgarsky:25. května 18:28

Napsal jsem SZ, pokud najdeme řešení, postnu ho sem.

Nahoru Odpovědět 25. května 18:28
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 14 zpráv z 14.