Witajcie,
potrzebuję wyciągnąć fragment tekstu w taki sposób, ze w komórce mam ciąg wartości ale trudność jest taka, że z przodu i z tyłu tego fragmentu jest niestala ilość znaków. Potrzebny do wyciągnięcia fragment zawsze następuje po ciągu znaków "name": i jest zawarty w cudzysłowiu.
Przykładowo - w pierwszym wierszu jest to Cvdot.pdf , w drugim cv.odt itd...
[{ "size":"167.586","name":"Cvdot.pdf","filename":"fu_adfnsz2extue6xs7n","ext":"pdf" }]
[{ "size":"112.705","name":"cv.odt","filename":"fu_aa4z4gi5meeg8ds","ext":"odt" }]
[{ "size":"17.92","name":"cv.doc","filename":"fu_dsdrqzg2fbgsdy4j","ext":"doc" }]
[{ "size":"80.912","name":"Cv%20Karolina%20Pas%202019.pdf","filename":"fu_dfsvyx2t9fmhbjv","ext":"pdf" }]
Będę wdzięczny za jakieś pomysły, wskazówki...
[SOLVED] Wyciągnięcie fragmentu tekstu
[SOLVED] Wyciągnięcie fragmentu tekstu
Ostatnio zmieniony wt maja 21, 2019 8:06 pm przez roki9, łącznie zmieniany 1 raz.
LibreOffice 6.2.3.2, Windows 10.0
Re: Wyciągnięcie fragmentu tekstu
Uwaga pierwsza: dlaczego Calc miałby być optymalnym narzędziem do obróbki struktur typu JSON? Łatwiej byłoby taki plik przeczytać (z analizą składni, czyli `przeparsować`) czymś, co rozumie notację. Szkic wstępny w Pythoniektóry w dosłownej postaci działa dość topornie (w środowisku wiersza poleceń), ale który łatwo da się rozbudować do makra wczytującego kolumnę z pliku do Calca. Warto, ale tylko wtedy, kiedy pracę tę wykonuje się regularnie na podstawie dostarczonych plików tekstowych / json. Bo dane pewnie pochodzą od skryptu obsługującego formularz wysyłki plików?
Choć prawdę mówiąc, nie jest dla mnie jasny także powód, dla którego listę nazw plików miałbym przechowywać jako kolumnę w Calcu.
Uwaga druga: wyrażenia regularne dadzą radę. Nie pokazuję jak, bo ...
Uwaga trzecia: przy następujących warunkach:
* dwukropki, przecinki i cudzysłowy nie występują w nazwach plików opisanych pod hasłem name,
* w opisach pole name zawsze jest drugie w kolejności,
poradzisz sobie nawet importem danych csv albo wklejeniem specjalnym takich danych (kopiuj / Ctrl+Shift+V jako tekst niesformatowany). Podaj jako separatory znaki :," z opcją scal, wtedy wszystkie nazwy plików dostaniesz w jednej kolumnie, zdaje się czwartej.
Kod: Zaznacz cały
import json
def czytaj(fname):
with open(fname) as f:
for x in f:
x = json.loads(x)
print(x[0]['name'])
if __name__ == '__main__':
import sys
if len(sys.argv) > 1:
czytaj(sys.argv[1])
else:
print('podaj nazwę pliku w wywołaniu')
input('...')
Choć prawdę mówiąc, nie jest dla mnie jasny także powód, dla którego listę nazw plików miałbym przechowywać jako kolumnę w Calcu.
Uwaga druga: wyrażenia regularne dadzą radę. Nie pokazuję jak, bo ...
Uwaga trzecia: przy następujących warunkach:
* dwukropki, przecinki i cudzysłowy nie występują w nazwach plików opisanych pod hasłem name,
* w opisach pole name zawsze jest drugie w kolejności,
poradzisz sobie nawet importem danych csv albo wklejeniem specjalnym takich danych (kopiuj / Ctrl+Shift+V jako tekst niesformatowany). Podaj jako separatory znaki :," z opcją scal, wtedy wszystkie nazwy plików dostaniesz w jednej kolumnie, zdaje się czwartej.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Wyciągnięcie fragmentu tekstu
Dzięki za odpowiedź Jan_J. Wiem, że Calc nie jest optymalny do obróbki ale napiszę o co chodzi...
2-3 razy w tygodniu eksportuję plik z systemu ankietowego do Calca, gdzie obrabiam dane. W jednym z pytań ankiety dodawany jest załącznik. Chciałbym w Calcu zrobić sobie linka (przy użyciu m.in. funkcji ZŁĄCZ.TEKST) po kliknięciu w który będzie mi się wyświetlać załącznik (teraz muszę ręcznie wchodzić w ankietę co jest czasochłonne).
Wiem, że można to sobie podzielić wklejając tekst i ustawiając rozdzielanie separatorem (:) ale ponieważ czynność jest wykonywana dosyć często, szukam jakiegoś bardziej 'eleganckiego' sposobu rozwiązania problemu (czytaj - przeciągnięcie formuły), tak bym tą jedną kolumną nie musiał się osobno zajmować.
2-3 razy w tygodniu eksportuję plik z systemu ankietowego do Calca, gdzie obrabiam dane. W jednym z pytań ankiety dodawany jest załącznik. Chciałbym w Calcu zrobić sobie linka (przy użyciu m.in. funkcji ZŁĄCZ.TEKST) po kliknięciu w który będzie mi się wyświetlać załącznik (teraz muszę ręcznie wchodzić w ankietę co jest czasochłonne).
Wiem, że można to sobie podzielić wklejając tekst i ustawiając rozdzielanie separatorem (:) ale ponieważ czynność jest wykonywana dosyć często, szukam jakiegoś bardziej 'eleganckiego' sposobu rozwiązania problemu (czytaj - przeciągnięcie formuły), tak bym tą jedną kolumną nie musiał się osobno zajmować.
LibreOffice 6.2.3.2, Windows 10.0
Re: Wyciągnięcie fragmentu tekstu
Podsyłam ci więc kawałek arkusza. Formuły są rozbite na trzy komórki aby łatwiej zobaczyć ich logikę, ale można oczywiście utworzyć jedną rozbudowaną.
- Załączniki
-
- roki9.ods
- (12.25 KiB) Pobrany 216 razy
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Wyciągnięcie fragmentu tekstu
O to chodziło. Dzięki Jermor, jesteś moim bohaterem
LibreOffice 6.2.3.2, Windows 10.0