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」の部分を取得するために分割したいと思います。

私はこの2つのコード行の解決策を試しました:

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

ここから、Python 結合の例を読んで、なぜ list.join(string) ではなく string.join(list) なのですか? .

共同でこの解決策を見つけましたが、次のエラー メッセージが表示されます。

>>> 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参加:なぜlist.join(string)ではなくstring.join(list)なのですか?

だからあります

"".join(mylist)

それ以外の

mylist.join("")

エラーがあります。

問題を解決するint/stringには、intをstringに変換します。

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()(または)を使用することが重要です。そうしないと、パスに他の が含まれてrsplit()いると正しく機能しません。'.'

于 2012-10-11T13:15:42.710 に答える
0

レコードを文字列に変換する必要があります。

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