list:在Python中拆分联接字符串的正确而优雅的方法

我有以下清单:

1
2
3
4
>>> poly
'C:\\04-las_clip_inside_area\\16x16grids_1pp_fsa.shp'
>>> record
1373155

我想创造:

1
'C:\\04-las_clip_inside_area\\16x16grids_1pp_fsa_1373155.txt'

为了得到"C:4-las_clip_inside_area16x16grids_1pp_fsa16x16grids_1pp_fsa"部分,我希望进行拆分。

我尝试了这个两行代码的解决方案:

1
2
3
mylist = [poly.split(".")[0],"_", record,".txt"]
>>> mylist
['C:\\04-las_clip_inside_area\\16x16grids_1pp_fsa', '_', 1373155, '.txt']

从这里开始,阅读Python join中的示例,为什么是string.join(list)而不是list.join(string)?

我找到了这个关节的解,但我得到了这个错误信息:

1
2
3
4
>>> mylist.join("")
Traceback (most recent call last):
  File"<interactive input>", line 1, in <module>
AttributeError: 'list' object has no attribute 'join'

如果我使用:

1
2
3
4
>>>"".join(mylist)
Traceback (most recent call last):
  File"<interactive input>", line 1, in <module>
TypeError: sequence item 2: expected string, int found

Python join:为什么是string.join(list)而不是list.join(string)?

所以有

1
"".join(mylist)

而不是

1
mylist.join("")

你的错误。

要解决您的int/string问题,请将int转换为string:

1
mylist= [poly.split(".")[0],"_",str(record),".txt"]

或者直接写:

1
"{}_{}.txt".format(poly.split(".")[0], record)


1
2
3
4
5
6
7
8
>>> 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'


1
2
3
4
>>> 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()

1
2
>>>"".join([poly.rpartition('.')[0],"_", str(record),".txt"])
'C:\\04-las_clip_inside_area\\16x16grids_1pp_fsa_1373155.txt'

使用rpartition()(或rsplit())是很重要的,否则如果路径中有任何其他的'.',它将无法正常工作


您需要将记录转换为字符串。

1
mylist= [poly.split(".")[0],"_",str(record),".txt"]