在 Python 中拆分连接字符串的正确而优雅的方法
Posted
技术标签:
【中文标题】在 Python 中拆分连接字符串的正确而优雅的方法【英文标题】:The right and elegant way to split a join a string in Python 【发布时间】:2012-10-02 03:45:45 【问题描述】:我有以下清单:
>>> poly
'C:\\04-las_clip_inside_area\\16x16grids_1pp_fsa.shp'
>>> record
1373155
我希望创建:
'C:\\04-las_clip_inside_area\\16x16grids_1pp_fsa_1373155.txt'
我希望拆分以获得“C:\04-las_clip_inside_area\16x16grids_1pp_fsa16x16grids_1pp_fsa”部分。
我已经尝试过这种两行代码的解决方案:
mylist = [poly.split(".")[0], "_", record, ".txt"]
>>> mylist
['C:\\04-las_clip_inside_area\\16x16grids_1pp_fsa', '_', 1373155, '.txt']
从这里,阅读 Python join, why is it string.join(list) instead of list.join(string)? 中的示例。
我找到了这个联合解决方案,但我收到以下错误消息:
>>> mylist.join("")
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
AttributeError: 'list' object has no attribute 'join'
如果我使用:
>>> "".join(mylist)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
TypeError: sequence item 2: expected string, int found
【问题讨论】:
【参考方案1】:Python join: why is it string.join(list) instead of list.join(string)?
所以有
"".join(mylist)
而不是
mylist.join("")
这是你的错误。
要解决您的int/string
问题,请将 int 转换为字符串:
mylist= [poly.split(".")[0],"_",str(record),".txt"]
或者直接写:
"_.txt".format(poly.split(".")[0], record)
【讨论】:
谢谢,我不明白为什么如果我尝试这个例子: >>>my_list = ["Hello", "world"] >>> print my_list.join("-") 我有此错误回溯(最近一次调用最后一次):文件“list.join(string)
。有string.join(list)
。您已经阅读了链接的讨论,不是吗?【参考方案2】:
>>> from os import path
>>>
>>> path.splitext(poly)
('C:\\04-las_clip_inside_area\\16x16grids_1pp_fsa', '.shp')
>>>
>>> filename, ext = path.splitext(poly)
>>> "0_1.txt".format(filename, record)
'C:\\04-las_clip_inside_area\\16x16grids_1pp_fsa_1373155.txt'
【讨论】:
我认为这是执行 OP 想要的 方式。每当您想处理路径时,您必须查看它(这就是它存在的原因!) @paolo:谢谢。我不明白为什么如果我尝试链接的示例: >>>my_list = ["Hello", "world"] >>> print my_list.join("-") 我有这个错误 Traceback (最近的电话最后):文件“'-'.join(my_list)
。 join
是字符串方法,而不是列表方法。这允许 join
处理任何可迭代的,而不仅仅是列表。
@Gianni 因为join()
方法在string
类中。您的第二个示例很好("".join(mylist)
),您只需将record
转换为字符串。例如,尝试"".join([poly.split(".")[0], "_", str(record), ".txt"])
【参考方案3】:
>>> poly = 'C:\\04-las_clip_inside_area\\16x16grids_1pp_fsa.shp'
>>> record = 1373155
>>> "_.txt".format(poly.rpartition('.')[0], record)
'C:\\04-las_clip_inside_area\\16x16grids_1pp_fsa_1373155.txt'
或者如果你坚持使用join()
>>> "".join([poly.rpartition('.')[0], "_", str(record), ".txt"])
'C:\\04-las_clip_inside_area\\16x16grids_1pp_fsa_1373155.txt'
使用rpartition()
(或rsplit()
)很重要,否则如果路径中有任何其他'.'
,它将无法正常工作
【讨论】:
【参考方案4】:您需要将记录转换为字符串。
mylist= [poly.split(".")[0],"_",str(record),".txt"]
【讨论】:
以上是关于在 Python 中拆分连接字符串的正确而优雅的方法的主要内容,如果未能解决你的问题,请参考以下文章