1

This is my first question and I'm pretty new to Python.

Though, I really tried a few different things before asking :-D

I have a file (test.txt) containing some text organized as follow:

name="NAME-ABC"                                                         NewName="GOOD MORNING"
name="NAME-123456"                                                      NewName="HELLO"
name="NAME-3"                                                           NewName="ALLO"

The output I'm trying to obtain is a dictionary with the previous values, such as:

{"NAME-ABC":"GOOD MORNING","NAME-123456":"HELLO","NAME-3":"ALLO"}

Using a small dictionary ("d" in my example below), I managed to remove the first name= part and replace the endline by a comma, but the middle part (containing a non consistent number of spaces and tabs + NewName=), I cannot deal with it.

My code so far is :

d =    {
  "name=": "",
  "\n": ","}


for x in range(len(d)):

    with open("test.txt") as f:
        newText=f.read().replace(list(d.items())[x][0], list(d.items())[x][1])

    with open("test.txt", "w") as f:
        f.write(newText)

which gives me a text.txt file as follow:

"NAME-ABC"                                                      NewName="GOOD MORNING",
"NAME-123456"                                               NewName="HELLO",
"NAME-3"                                                        NewName="ALLO"

but if I put something like

d =    {
      "name=": "",
      "\n": ",",
       re.compile(r'\s*NewName='): ":"}

I get the following error

TypeError: replace() argument 1 must be str, not re.Pattern

I then tried to use re.sub to handle regex, but now, it just doesn't do anything at all (program runs, but no modification in the file):

for line in "test.txt":
    line = re.sub(r'\s*NewName=',":","test.txt")

Thanks in advance for your help folks

1 Answer 1

1

Using Regex.

Ex:

import re

res = {}
with open(filename) as infile:
    for line in infile:                                   #Iterate Each line
        k, v = re.findall(r'=\"(.*?)\"', line.strip())    #Get Key-Value --> Get string in Quotes
        res[k] = v                                        #Form output
print(res)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.