在 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("-") 我有此错误回溯(最近一次调用最后一次):文件“”,第 1 行,在 中 AttributeError:“list”对象没有属性“join” @Gianni - 因为没有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 (最近的电话最后):文件“”,第 1 行,在 中 AttributeError: 'list' object has no attribute 'join' @Gianni -- 你想要'-'.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 中拆分连接字符串的正确而优雅的方法的主要内容,如果未能解决你的问题,请参考以下文章

教你Python字符串的基本操作:拆分和连接

拆分字符串并删除空格 Python

教你Python字符串的基本操作:拆分和连接

Python3:替换拆分的字符串

在python中拆分数字字符串[重复]

如何在 Python 中加速字符串拆分