Wpis z mikrobloga

Cześć!
Niestety daleko mi do #programista15k, ale wydaje mi się, że problem, który muszę rozwiązać to zadanie dla #programista jak najbardziej.

Napisałem prosty skrypt .bat do generowania listy plików (ścieżki dostępu) w danym katalogu.

dir /b /s *.*> Nazwyplikowkatalogu.txt


Po jego uruchomieniu w katalogu powstaje plik txt ze ścieżkami dostępu na następującej treści:

C:\Users\user\Desktop\Nowy folder\Nazwyplikowkatalogu.txt

C:\Users\user\Desktop\Nowy folder\nazwyplik˘w.bat

C:\Users\user\Desktop\Nowy folder\nazwapliku1PL.zip

C:\Users\user\Desktop\Nowy folder\nazwapliku2.zip

C:\Users\user\Desktop\Nowy folder\nazwapliku3.zip

C:\Users\user\Desktop\Nowy folder\nazwapliku4PL.zip

C:\Users\user\Desktop\Nowy folder\nazwapliku5.zip

C:\Users\user\Desktop\Nowy folder\nazwapliku6.zip

C:\Users\user\Desktop\Nowy folder\nazwapliku7PL.zip


Da się zrobić taki skrypt, aby w tym programie tekstowym, który powstaje został dopisany stały tekst + zmienna, która jest uwarunkowana od nazwy pliku ",%zmienna%,0,1,0,,0,,,,,,,,,,,".
Warunek zmiennej wygląda tak, że jeżeli w nazwie pliku jest wyrażenie "PL", to zmienna przyjmuje wartość=1 (czyli ciąg znaków wygląda tak: ,1,0,1,0,,0,,,,,,,,,,,), a jeśli nie ma tego w nazwie, to zmienna przyjmuje wartość=2(czyli ciąg znaków wygląda tak:,2,0,1,0,,0,,,,,,,,,,,).

O co chodzi? Chciałbym, aby powstała lista .txt wyglądała następująco:

C:\Users\user\Desktop\Nowy folder\nazwapliku1PL.zip,1,0,1,0,,0,,,,,,,,,,,

C:\Users\user\Desktop\Nowy folder\nazwapliku2.zip,2,0,1,0,,0,,,,,,,,,,,

C:\Users\user\Desktop\Nowy folder\nazwapliku3.zip,2,0,1,0,,0,,,,,,,,,,,

C:\Users\user\Desktop\Nowy folder\nazwapliku4PL.zip,1,0,1,0,,0,,,,,,,,,,,

C:\Users\user\Desktop\Nowy folder\nazwapliku5.zip,2,0,1,0,,0,,,,,,,,,,,

C:\Users\user\Desktop\Nowy folder\nazwapliku6.zip,2,0,1,0,,0,,,,,,,,,,,

C:\Users\user\Desktop\Nowy folder\nazwapliku7_PL.zip,1,0,1,0,,0,,,,,,,,,,,


jest możliwe wygenerowanie takiej listy plików z automatu? Jest to ciężki orzech do zgryzienia? Wiem jak to wygląda od strony technicznej, ale brakuje mi umiejętności i języka, aby to napisać, więc pomyślałem, że wsadowo będzie to najprościej ogarnąć...

Ktoś pomoże? Dzięki za wszelkie rady.

#programowanie #programista15k #programista10k #pomocy #pytaniedoeksperta #kiciochpyta #porady #programujzwykopem
  • 15
  • Odpowiedz
Gratulacje! Wygrałeś darmowy jednokierunkowy bilet do mojej banlisty za zaśmiecanie taga P15K śmieciami z Windowsa.
  • Odpowiedz
@ddzwon: Dziękuję, nagrodę proszę wysłać pocztą :-).
@pan_welniak: dzięki, postaram się zerknąć, ale nie ukrywam, że z programowaniem mam niewiele wspólnego.
Czy dobrze myślę o programowaniu wsadowym czy lepiej użyć czegoś innego do tego zadania?
  • Odpowiedz
@szczemat: jak nie masz do czynienia z programowaniem, to zawsze możesz tę listę plików wrzucić do Excela i tam funkcją znajdź sprawdzać czy dany ciąg znaków występuje w stringu i na tej podstawie generować nowego stringa
  • Odpowiedz
@yoyebie: w sumie dzięki za przypomnienie o tej możliwości. Chciałem jednak maksymalnie usprawnić swoją pracę, czyli kliknąć, wygenerować i zapomnieć.
W przypadku Excela musiałbym wygenerować listę plików, ręcznie wkleić ją do Excela i następnie generować stringa i wkleić go ponownie do pliku txt.
  • Odpowiedz
@zibizz1: programista nie pisze skryptów? W takim razie co polecasz skoro już odpowiedziałeś na moje pytanie, a nie wniosło ono wiele do tematu?

@pan_welniak: @yoyebie: to może tak. Jeśli wygenerowany plik txt zawiera linijkę z PL, to do końca tej linijki wstawia ,1,0,1,0,,0,,,,,,,,,,,
Jeśli nie zawiera PL w danej linijce, to wstaw ciąg ,2,0,1,0,,0,,,,,,,,,,,

Jest taka możliwość w jakiś prosty sposób?
  • Odpowiedz
@asunez: Ok, dziękuję za informację. Poszukam tutoriali - może uda się coś znaleźć. Najgorsze jest to, że z pozoru ten problem wydaje się prosty do rozwiązania.
  • Odpowiedz
@szczemat: bo jest. Interesują Cie takie rzeczy jak stringi i metody na nich: contains, substring, replace (pisze ogólnie, nie w kontekście Pythona). Przyda Ci się też zebranie listy plików i metoda do zmiany ich nazwy w konkretnym miejscu. Mogą być przydatne wyrażenia regularne, ale nie jest to konieczność - chociaż poznanie tego tematu na pewno nie zaszkodzi.

Z tego co rozumiem to program/skrypt powinien działać mniej więcej tak:

1. Pobierz nazwy
  • Odpowiedz
@asunez: zainstalowałęm pythona i zaczynam kurs od podstaw. Myślę, że mój problem nie wykracza poza podstawy tego języka.

Na razie jestem na etapie szkicu, tego co chcę osiągnąc i posłużę się Twoim schematem. Wymyśliłem coś takiego, aby maksymalnie uprościć moje założenia

1. Pobierz ścieżki dostępu wszystkich plików we wskazanym folderze i wygeneruj plik lista.txt, który zawiera ścieżki dostępów do każdego pliku z tego folderu (każda ścieżka w oddzielnej linijce).
2. Przeskanuj
  • Odpowiedz
@szczemat: a dobra, źle przeczytałem, ty chcesz te nazwy tylko w tym pliku tekstowym modyfikować, a nie faktycznie w systemie. Wtedy Twoj schemat jak najbardziej w porządku jest
  • Odpowiedz
@asunez: Jednak pozwolę sobie zadać pytanie, bo znalazłem chwilę czasu na napisanie tego skryptu w Pythonie. To moje pierwsze podejście do jakiegokolwiek języka programowania (HTML i CSS nie liczę, bo to inna para kaloszy), więc proszę o wyrozumiałość.

with open("proba.txt") as f_stary, open("proba-wynik.txt", "w") as f_nowy:
for line in f_stary:
f_nowy.write(line)
if 'PL' in line:
f_nowy.write(",1,0,1,0,,0,,,,,,,,,,," + "\n")
else:
f_nowy.write(",2,0,1,0,,0,,,,,,,,,,," + "\n")

Daje mi to następujący wynik:

C:\Users\xxx\Desktop\Nowy folder\nazwapliku.zip

,2,0,1,0,,0,,,,,,,,,,,

C:\Users\xxx\Desktop\Nowy
  • Odpowiedz
@zibizz1: @yoyebie: @pan_welniak: @asunez:
Jednak znalazłem rozwiązanie f_nowy.write((line).rstrip('\n')).

Czyli wszystko działa tak jak powinno. Spróbuję jeszcze popracować nad czytaniem plików i pozwolę sobie ponownie zawołać, gdyby miał problem. Metoda żółtej kaczki zadziałała ;-)
  • Odpowiedz