Python string som argument i funktion, sluta tolka \t, \n etc. som escape code
Hej!
Jag skriver på en funciton som ska ta en textfil som följer ett visst format och ge ut datan i en pandas df. Mitt problem är dock att:
"C:\Users\username\path_name\the_file.txt"
\t här inte tolkas som en vanlig del av min sträng. Jag vet att jag kan skriva:
r"C:\Users\username\path_name\the_file.txt"
Men, detta ska vara en del av en funktion där tanken är att:
def min_konverterare(file_path, divider)
Jag ska ta in en sträng och berätta vad som delar upp datan och jag vill kunna ge vilken file path som helst som argument och då kan jag inte riktigt använda r"C:\Users\username\path_name\the_file.txt" som lösning då
"C:\Users\username\path_name\the_file.txt" heter file_path i scopet för funktionen
Just nu kan jag inte köra funktionen alls för jag får:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Så fort raden med strängen läses in.
Jag har sett massor av lösningar på stack overflow men ingen där man tar in en path som argument.
Någon som har en lösning?
Tack på förhand!
Hmmm, Windows... Har du provat "C:\\Users\\username\\path_name\\the_file.txt" ?
Ja det verkar fungera! Min tanke är att användaren av funktionen ska kunna kopiera path till valfri txt-fil och sen köra funktionen och få ut ett pandas dataframe, men jag lyckas liksom inte manipulera strängen överhuvudtaget eftersom programmet kraschar så fort den sträng jag har i mitt exempel läses in. Så jag lyckas liksom inte automatisera att det ska bli \\ i strängen.
Så då kan man ju köra r framför som i: r"C:\Users\username\path_name\the_file.txt"
Men då fastnar jag istället på att då argumenet i funktionen är path-name som är en sträng så vet jag inte hur jag ska lägga till r framför i själva scopet för funktionen.
Spontant känns det som att det är fel av mig att jobba med paths i sträng-format och att jag kanske borde borde hantera detta på något sätt innan men kommer inte på hur :(
Kan följande funka på något lämpligt ställe i koden?
path.replace('\\', '\\\\')
Annars är pathlib ett bra bibliotek för att hantera sökvägar. Vet inte om det har funktionalitet för ditt use case med att kopiera in sökvägen men du kan ju titta på det.
Du kan t ex låta funktionen ersätta alla "\" med "\\" innan den öppnar filen.
Tack så mycket för svaren!
Just nu ser min funktion ut såhär:
def txt_to_pandas_converter(file_path, sep_char):
'''
Write some documentation here
'''
index = 0
with open(file_path, encoding='utf-8') as f:
failed_columns = []
failed_index = []
errors = []
col_names = f.readline()
df = pd.DataFrame(columns=[col_names.split(sep_char)])
for line in f:
to_be_added = line.split(sep_char)
try:
df.loc[index] = line.split(sep_char)
except Exception as error:
errors.append(error)
failed_columns.append(to_be_added)
failed_index.append(index)
index = index + 1
if index == 600:
break
return df, failed_columns, failed_index
Och det jag vill köra är t.ex:
test = txt_to_pandas_converter("C:\Users\username\path_name\the_file.txt", "|")
Jag tror mitt problem är att jag inte hinner göra något med strängen alls innan programmet kraschar, i VScode som jag kör så är \t gult medan övriga delar av strängen har orange färg.
Har ni något exempel på hur jag gör för att erstätta '\' med '\\'?
se #4
Men du anger strängen i din kod och då måste du antingen skriva \\ eller använda raw-format
Om du läser in strängen med input så hanterar Python escape-problematiken
Alright! Tack så mycket för hjälpen, har nog en lösning på g som jag kan skriva in här om ett tag! :)