Bắt ArcGIS bao gồm các số 0 đứng đầu trong trường văn bản?


9

Tôi đang nhập các ký tự trong trường văn bản về cơ bản là ID 5 số. Tôi cần các số 0 đứng đầu để được bao gồm trong giá trị, nhưng mỗi khi tôi nhập hoặc tính toán trường, các số 0 đứng đầu sẽ bị xóa (mặc dù các thuộc tính trường cho biết đó là trường văn bản 5 ký tự).

Làm cách nào để buộc trường bao gồm các số 0 đứng đầu?

Câu trả lời:


12

Python có tích hợp sẵn cho các số không hàng đầu. Sử dụng str.zfill()để thêm các số 0 đứng đầu vào một trường văn bản.

my_string = "1"
print my_string.zfill(2)   # Prints 01

my_string = "1000"
print my_string.zfill(2)   # Prints 1000

(ví dụ từ https://stackoverflow.com/a/21620624/5754917 )

Vì vậy, trong máy tính trường, bạn chỉ cần xác định tên của trường bằng ID của mình và sau đó điền vào số không

str(!myfield!).zfill(5)

nhập mô tả hình ảnh ở đây

Và kết quả cuối cùng:

nhập mô tả hình ảnh ở đây

Nhớ chuyển máy tính trường sang "Trình phân tích cú pháp Python"


OK, điều này có vẻ rất đơn giản. Tôi sẽ thử! Cảm ơn.
CJSF

Ổn thỏa! Đây chính xác là những gì tôi cần và rất dễ dàng, tôi gần như xấu hổ! Cám ơn rất nhiều!
CJSF

3

Chỉ cần đặt văn bản của bạn trong dấu ngoặc kép. Nhân đôi dấu ngoặc kép nếu bạn đang ở chế độ VB Script và gấp đôi hoặc đơn nếu ở chế độ Python.

Để giải thích: Khi bạn chỉ cần nhập các số, bạn sẽ cung cấp cho Máy tính trường một giá trị ở dạng số nguyên, nó sẽ chuyển đổi thành một chuỗi cho bạn để nhập nó vào trường loại chuỗi. Đối với số nguyên, các số 0 đứng đầu không có giá trị và không có ý nghĩa, vì vậy chúng bị bỏ qua. Nếu bạn đặt nó trong dấu ngoặc kép, thay vào đó bạn sẽ truyền cho nó một chuỗi, đây đã là kiểu dữ liệu chính xác, vì vậy nó sẽ bị bỏ lại một mình.

Điều này cũng giả sử rằng trường này thực sự thuộc loại "Văn bản". Có thể nó được đặt thành Số nguyên dài hoặc ngắn, điều đó cũng sẽ gây ra hành vi này.


Cảm ơn, tôi đoán điều này cũng sẽ làm việc. Nhưng cuối cùng tôi sẽ cần phải lấy giá trị mà không có các số 0 đứng đầu từ một phần của trường khác như một phần của quy trình bán tự động lớn hơn.
CJSF

Nếu bạn có thể chỉnh sửa câu hỏi của mình và thêm một số chi tiết và toàn bộ mã bạn hiện có, chúng tôi có thể có thể giúp bạn tốt hơn. Có vẻ như bạn chỉ đang viết thủ công các giá trị cho một loạt các hàng.
PhilippNagel

2

Bạn có thể sử dụng khối mã Python .

Thêm định nghĩa hàm này trong khối mã:

def addZero(value):
    if value <= 9:
        output = '0000' + str(value)
    elif value <= 99:
        output = '000' + str(value)
    elif value <= 999:
        output = '00' + str(value)
    elif value <= 9999:
        output = '0' + str(value)
    return output

Bạn có thể sử dụng nó như:

addZero(!Field!) # numeric field

hoặc là

addZero(123) # for example

Bạn sẽ muốn đưa ra các định nghĩa <= cho các giới hạn trên :)
MaryBeth

@MaryBeth vâng, lỗi của tôi. Đã chỉnh sửa
aldo_tapia

2

Như đã đề cập trong các câu trả lời khác, bạn cần đảm bảo số của bạn được chuyển đổi thành chuỗi.

Nếu bạn mất 0 hoặc có chúng trong trường số, hãy tạo cột chuỗi có chiều rộng 5, chỉ cần nhập lệnh Python sau:

str(!MYFIELD!).zfill(5)

Được sở hữu bởi @Unavalo! Tôi đã quá chậm: D
gisnside
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.