An import script removes the marker item: from incoming labels. A label such as item:time should become time. Calling the left-strip method with that marker produces a surprising result: every letter disappears. The remaining name happens to contain only characters that the strip operation was allowed to consume.
Python’s string documentation defines the argument to that operation as a set of removable characters. It keeps consuming characters from the left while they belong to the set. Their order inside the argument carries no requirement about their order in the input.
label = "item:time"
print(repr(label.lstrip("item:"))) # ''
print(repr(label.removeprefix("item:"))) # 'time'
print(repr(label)) # 'item:time'
Use the exact-prefix method when the format has a literal opening marker. It removes one matching opening string and leaves a nonmatching string’s content unchanged. Python added this method in version 3.9. The original string also remains unchanged, so keep or return the result when the next step needs the shortened value.
The distinction was the reason for the addition. Python Enhancement Proposal 616 records repeated confusion over character stripping and specifies separate methods for removing exact prefixes and suffixes. Matching a complete marker is a useful operation to name directly, especially when the next person maintaining the importer needs to understand its input format.
The prefix method is forgiving about a missing marker. A parser that requires the marker should check for it explicitly and raise an error before continuing. Otherwise, a malformed label can travel through the import unchanged and resemble a legitimate result. Decide whether the marker is optional as part of defining the format.
def read_item_label(text):
prefix = "item:"
if not text.startswith(prefix):
raise ValueError("Expected an item label")
return text.removeprefix(prefix)
print(read_item_label("item:time")) # time
Removing one occurrence also matters. Given two markers at the beginning, one call leaves the second marker in place. If repeated markers indicate a bad export, preserve that signal and reject it separately. If the format permits repeated markers, make repeated removal an explicit parsing step. The proposal deliberately kept that behavior out of a single call.
Keep character stripping for jobs that actually need a set of characters, such as removing a chosen group of padding characters from an edge. For named file endings, use the corresponding exact-suffix operation. It expresses which ending the format permits without teaching a character-strip call to recognize a substring.
For this importer, test a normal label, a name made entirely from marker characters, a missing marker, and a repeated marker. Include a marker-only input and decide whether an empty name is legal. These examples expose the format’s decisions while keeping string manipulation small enough to inspect.

The Campfire
CommentsThanks. Your comment is waiting for the desk. Once it is approved it appears here within about a minute.
Add a comment