Home > Mobile >  Python - Why is "Pathlib.Path.touch()" appending a "?" to the filename
Python - Why is "Pathlib.Path.touch()" appending a "?" to the filename

Time:09-17

I have a file called "mp3.txt" with the following content:

1.mp3
2.mp3
3.mp3
4.mp3
5.mp3

The Python code to read the "mp3.txt", and create a new file for each line:

from pathlib import Path

with open("mp3.txt", "r") as file:
    for line in file.readlines():
        Path(line).touch()

Result:

1.mp3?         3.mp3?         5.mp3?         
2.mp3?         4.mp3?      

I'm only experiencing this when I'm reading from a file. If I do the same thing from a list() instead of a file like so:

from pathlib import Path

l = ["1.mp3", "2.mp3", "3.mp3", "4.mp3", "5.mp3"]

for i in l:
    Path(i).touch()

The output looks ok:

1.mp3   2.mp3   3.mp3   4.mp3   5.mp3

Yes, I did try appending the file's content into a list():

from pathlib import Path

l = []

with open("mp3.txt", "r") as file:
    for line in file.readlines():
        l.append(line)

for i in l:
    Path(i).touch()

and the "?" is still being appended in the filename. The documentation don't have anything on this type of behavior.

CodePudding user response:

Strip the strings (file names). The "new line" you have after each file name cause the ? to be part of the file that is created by Path

from pathlib import Path

with open("mp3.txt", "r") as file:
    file_names = [line.strip() for line in file.readlines()]
    for file_name in file_names:
        Path(file_name).touch()

CodePudding user response:

Based on the answer, I came up with this:

from pathlib import Path

with open("mp3.txt", "r") as file:
    for line in file.readlines():
        new = line.strip()
        Path(new).touch()
  • Related