Hướng dẫn python escape spaces in filename - python thoát không gian trong tên tệp

Nếu bạn đang đọc các đường dẫn ra khỏi một tệp và chuyển chúng cho các chức năng như

/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif
2, bạn không cần phải thoát khỏi chúng. Ví dụ:

>>> with open['name with spaces', 'w'] as f:
...     f.write['abc\n']
>>> os.path.getsize['name with spaces']
4

Trên thực tế, chỉ có một số ít các chức năng trong Python cần không gian thoát ra, vì chúng sẽ chuyển một chuỗi vào vỏ [như

/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif
3] hoặc vì họ đang cố gắng phân tích cú pháp giống như vỏ thay cho bạn [như
/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif
4 với một chuỗi arg thay vì một danh sách arg].

Vì vậy, hãy nói

/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif
5 trông như thế này:

/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif

Sau đó, một cái gì đó như thế này sẽ hoạt động tốt:

with open['logfile.txt'] as logf:
    for line in logf:
        with open[line.rstrip[]] as f:
            do_something_with_tiff_file[f]

Nhận thấy những ký tự

/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif
6 trong ví dụ của bạn, nếu đây là các mẫu GLOB, điều đó cũng tốt:

with open['logfile.txt'] as logf:
    for line in logf:
        for path in glob.glob[line.rstrip[]]:
            with open[path] as f:
                do_something_with_tiff_file[f]

Nếu vấn đề của bạn hoàn toàn trái ngược với những gì bạn mô tả và tệp chứa đầy các chuỗi bị thoát ra và bạn muốn giải phóng chúng,

/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif
7 sẽ hoàn tác thoát khỏi phong cách Python và có các chức năng khác nhau để hoàn tác các loại thoát ra khác nhau, Nhưng mà không biết bạn muốn thoát khỏi loại nào bạn muốn hoàn tác, thật khó để nói bạn muốn chức năng nào

Trong các chuỗi Python, dấu gạch chéo ngược "\" là một nhân vật đặc biệt, còn được gọi là nhân vật "Escape". Nó được sử dụng để thể hiện các ký tự khoảng trắng nhất định: "\ t" là một tab, "\ n" là một dòng mới và "\ r" là một sự trở lại vận chuyển.

import os
file = "C:\\test file.txt"
os.system["start '" +file +"'"]

Error:

The system cannot find the file 'C:\test.

Bạn có thể có không gian trong tên tệp Python không?

Bài viết: 6.3876,387

Chủ đề: 115115

Tham gia: Tháng 9 năm 2016Sep 2016

Danh tiếng: 481 481

Tháng 6-01-2018, 01:49 PM [Bài đăng này đã được sửa đổi lần cuối: Tháng 6-01-2018, 01:49 PM bởi Snippsat.] [This post was last modified: Jun-01-2018, 10:47 AM by snippsat.]

.

/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif
8 Chỉ cần trả lại tên tệp, vậy tại sao bạn nên thêm ____ 19 [chuỗi thô]? Nếu bạn tự xây dựng con đường thì có thể
with open['logfile.txt'] as logf:
    for line in logf:
        with open[line.rstrip[]] as f:
            do_something_with_tiff_file[f]
0 không phải là singel
with open['logfile.txt'] as logf:
    for line in logf:
        with open[line.rstrip[]] as f:
            do_something_with_tiff_file[f]
1 vì người thuê nhà thoát hiểm. Có lẽ tôi hiểu lầm bạn, vì vậy tốt hơn là bạn đăng mã và giải thích những gì không hoạt động.

Ở đây bằng cách sử dụng listdir và mở trong ứng dụng Windows mặc định của Notepad. Bây giờ tôi chỉ làm việc từ thư mục hiện tại để không cần đường dẫn.
So this open in default applications and can handle space in file name.

import subprocess

subprocess.run[['cmd', '/C', 'start', '', r'E:\env\test file.txt']]

Bài viết: 32

import webbrowser

webbrowser.open[r'E:\env\test file.txt']

Chủ đề: 9

import webbrowser
 
webbrowser.open[r'/home/mint/test file.txt']

Tham gia: Mar 2017

import os

os.startfile[r'E:\env\test file.txt', 'open']

Bài viết: 3232

Chủ đề: 99

Tham gia: Mar 2017Mar 2017

Danh tiếng: 0 0

[Jun-01-2018, 01:49 PM] Snippsat đã viết:
The issue is the r"string space". I never actually define the string manually it's just pulled from os.listdir[] so I can't add the r to the start of the string

Webbroweser là mô -đun tốt nhất mà tôi đang tìm kiếm. Nó khắc phục sự cố tên tệp và cũng mở cửa sổ "Mở với" cho các tệp không liên kết
So-and-so of the Yard

Làm thế nào để bạn thoát khỏi không gian trong Python?2,908

Trong các chuỗi Python, dấu gạch chéo ngược "\" là một nhân vật đặc biệt, còn được gọi là nhân vật "Escape". Nó được sử dụng để thể hiện các ký tự khoảng trắng nhất định: "\ t" là một tab, "\ n" là một dòng mới và "\ r" là một sự trở lại vận chuyển.46

Tham gia: Tháng 9 năm 2016Sep 2016

Danh tiếng: 89 89

Tháng 6-01-2018, 01:06 PM [Bài đăng này đã được sửa đổi lần cuối: Tháng 6-01-2018, 01:49 PM bởi Wavic.] [This post was last modified: Jun-01-2018, 01:49 PM by wavic.]

Như tôi biết đường dẫn Windows là nhị phân. Vì vậy, thay vì r '' tiền tố, hãy thử B ''. Tôi không biết nếu điều đó được thay đổi. Tôi đã không sử dụng Windows trong nhiều năm.

Bài viết: 6.3876,387

Chủ đề: 115115

Tham gia: Tháng 9 năm 2016Sep 2016

Danh tiếng: 481 481

Tháng 6-01-2018, 01:49 PM [Bài đăng này đã được sửa đổi lần cuối: Tháng 6-01-2018, 01:49 PM bởi Snippsat.] [This post was last modified: Jun-01-2018, 01:49 PM by snippsat.]

.AceScottie Wrote: I never actually define the string manually it's just pulled from os.listdir[] so I can't add the r to the start of the string

/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif
8 Chỉ cần trả lại tên tệp, vậy tại sao bạn nên thêm ____ 19 [chuỗi thô]? Nếu bạn tự xây dựng con đường thì có thể
with open['logfile.txt'] as logf:
    for line in logf:
        with open[line.rstrip[]] as f:
            do_something_with_tiff_file[f]
0 không phải là singel
with open['logfile.txt'] as logf:
    for line in logf:
        with open[line.rstrip[]] as f:
            do_something_with_tiff_file[f]
1 vì người thuê nhà thoát hiểm. Có lẽ tôi hiểu lầm bạn, vì vậy tốt hơn là bạn đăng mã và giải thích những gì không hoạt động.
If you build path yourself then can
with open['logfile.txt'] as logf:
    for line in logf:
        with open[line.rstrip[]] as f:
            do_something_with_tiff_file[f]
0 just not singel
with open['logfile.txt'] as logf:
    for line in logf:
        with open[line.rstrip[]] as f:
            do_something_with_tiff_file[f]
1 because of escape charterer.
Maybe i misunderstand you,so it's better that you post code and explain what's not working.

Ở đây bằng cách sử dụng listdir và mở trong ứng dụng Windows mặc định của Notepad. Bây giờ tôi chỉ làm việc từ thư mục hiện tại để không cần đường dẫn.
Now i just working from current folder so no path is needed.

/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif
0

Bài viết: 3232

Chủ đề: 99

Tham gia: Mar 2017Mar 2017

Danh tiếng: 0 0

[Jun-01-2018, 01:49 PM] Snippsat đã viết:snippsat Wrote:
.AceScottie Wrote: I never actually define the string manually it's just pulled from os.listdir[] so I can't add the r to the start of the string
/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif
8 Chỉ cần trả lại tên tệp, vậy tại sao bạn nên thêm ____ 19 [chuỗi thô]? Nếu bạn tự xây dựng con đường thì có thể
with open['logfile.txt'] as logf:
    for line in logf:
        with open[line.rstrip[]] as f:
            do_something_with_tiff_file[f]
0 không phải là singel
with open['logfile.txt'] as logf:
    for line in logf:
        with open[line.rstrip[]] as f:
            do_something_with_tiff_file[f]
1 vì người thuê nhà thoát hiểm. Có lẽ tôi hiểu lầm bạn, vì vậy tốt hơn là bạn đăng mã và giải thích những gì không hoạt động.
If you build path yourself then can
with open['logfile.txt'] as logf:
    for line in logf:
        with open[line.rstrip[]] as f:
            do_something_with_tiff_file[f]
0 just not singel
with open['logfile.txt'] as logf:
    for line in logf:
        with open[line.rstrip[]] as f:
            do_something_with_tiff_file[f]
1 because of escape charterer.
Maybe i misunderstand you,so it's better that you post code and explain what's not working.

Ở đây bằng cách sử dụng listdir và mở trong ứng dụng Windows mặc định của Notepad. Bây giờ tôi chỉ làm việc từ thư mục hiện tại để không cần đường dẫn.
Now i just working from current folder so no path is needed.

/Volumes/My Drive/My Scans/Batch 1/foo bar.tif
/Volumes/My Drive/My Scans/Batch 1/spam eggs.tif
/Volumes/My Drive/My Scans/Batch 2/another long name.tif
0

Webbroweser là mô -đun tốt nhất mà tôi đang tìm kiếm. Nó khắc phục sự cố tên tệp và cũng mở cửa sổ "Mở với" cho các tệp không liên kết
it fixes the file name issue and also opens the "open with" window for non associated files
Thansk

Làm thế nào để bạn thoát khỏi không gian trong Python?

Trong các chuỗi Python, dấu gạch chéo ngược "\" là một nhân vật đặc biệt, còn được gọi là nhân vật "Escape".Nó được sử dụng để thể hiện các ký tự khoảng trắng nhất định: "\ t" là một tab, "\ n" là một dòng mới và "\ r" là một sự trở lại vận chuyển.the backslash "\" is a special character, also called the "escape" character. It is used in representing certain whitespace characters: "\t" is a tab, "\n" is a newline, and "\r" is a carriage return.

Bạn có thể có không gian trong tên tệp Python không?

Không có vấn đề gì với không gian trong tên.Bạn đã thử sử dụng dấu gạch chéo về phía trước thay vì Basckslash chưa?Tiếng chém về phía trước hoạt động tốt.Không gian cũng vậy.. Have you tried using forward slashes instead of the basckslash? Forward slashes work fine. so do spaces.

Đường dẫn hệ điều hành Normpath là gì?

OS.Path.NormPath [đường dẫn] bình thường hóa một tên đường dẫn bằng cách thu gọn các dấu phân cách dự phòng và các tham chiếu cấp độ lên để a // b, a/b/, a/,/b và a/foo /..Thao tác chuỗi này có thể thay đổi ý nghĩa của một đường dẫn chứa các liên kết tượng trưng.Trên Windows, nó chuyển đổi dấu gạch chéo về phía trước thành chém lùi.Normalize a pathname by collapsing redundant separators and up-level references so that A//B , A/B/ , A/./B and A/foo/../B all become A/B . This string manipulation may change the meaning of a path that contains symbolic links. On Windows, it converts forward slashes to backward slashes.

Bài Viết Liên Quan

Chủ Đề