11

我有以下列表:

>>> 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 中的示例,为什么它是 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
4

4 回答 4

20

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)
于 2012-10-11T13:06:43.470 回答
7
>>> 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'
于 2012-10-11T13:17:10.650 回答
1
>>> 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()(or rsplit()) 很重要,否则如果路径中有任何其他'.'' ,它将无法正常工作

于 2012-10-11T13:15:42.710 回答
0

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

mylist= [poly.split(".")[0],"_",str(record),".txt"]
于 2012-10-11T13:10:06.003 回答