我有以下列表:
>>> 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_fsa16x16grid_1pp_fsa"。
我尝试过这两种代码行解决方案:
mylist = [poly.split(".")[0], "_", record, ".txt"]
>>> mylist
['C:\04-las_clip_inside_area\16x16grids_1pp_fsa', '_', 1373155, '.txt']
从这里开始,阅读Pythonjoin中的示例,为什么它是string.join(list)而不是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
Python join:为什么是string.join(list)而不是list.join(string)
所以有
"".join(mylist)
而不是
mylist.join("")
这是你的错误。
要解决int/string
问题,请将int转换为字符串:
mylist= [poly.split(".")[0],"_",str(record),".txt"]
或直接写入:
"{}_{}.txt".format(poly.split(".")[0], record)
>>> 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'
>>> 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()
)很重要,否则如果路径中有任何其他'.'
的,它将无法正常工作
您需要将记录转换为字符串。
mylist= [poly.split(".")[0],"_",str(record),".txt"]