पायथन और फ़ील्ड कैलकुलेटर का उपयोग करके फ़ील्ड से रिटर्न / न्यूलाइन (\ n) वर्ण हटा रहा है?


14

मेरे पास एक फ़ील्ड के साथ एक जियोडैटेबेस टेबल है जिसे मैं रिटर्न वर्ण (नई लाइन) निकालने की कोशिश कर रहा हूं। मुझे यह पोस्ट मिला ( मैं इसे कैसे करूं ? पायथन में एक नई पंक्ति कैसे हटा सकता हूं? ), हालांकि यह क्षेत्र कैलकुलेटर के भीतर काम नहीं कर रहा है। यहाँ कोड स्निपेट हैं जो मैंने कोशिश की: नोट रिटर्न चरित्र स्ट्रिंग के अंत में नहीं है

!myField!.rstrip()

या

!myField!.rstrip('\n')

या

!myField!.rstrip('\r\n')

या

!myField!.replace('\n', '')

इस विकल्प के लिए दी गई 000539 त्रुटि:

विवरण परिकलित फ़ील्ड या परिकलित मान उपकरण द्वारा उपयोग की जाने वाली गणना अमान्य है। प्रदान किया गया यह त्रुटि संदेश विशिष्ट पायथन त्रुटि को सूचीबद्ध करेगा।

समाधान यह त्रुटि कोड कई पायथन त्रुटियों को शामिल करता है:

उदाहरण त्रुटि 1: अपवाद। टाइपError: 'str' और 'int' ऑब्जेक्ट को समाप्‍त नहीं कर सकते। ऊपर एक पायथन-विशिष्ट त्रुटि है। गणना एक स्ट्रिंग और एक संख्या को जोड़ने या जोड़ने का प्रयास कर रही है।

उदाहरण त्रुटि 2: अमान्य फ़ील्ड आकार @ दूरी ज्यामिति ऑब्जेक्ट का उपयोग करके एक त्रुटि है। दूरी विधि ज्यामिति वस्तु का एक वैध तरीका नहीं है।

विशिष्ट पायथन मुद्दों के लिए, अधिक जानकारी के लिए बाहरी पायथन मदद से परामर्श करें, या इन उपकरणों पर अधिक जानकारी के लिए गणना फ़ील्ड या गणना मूल्य सहायता की सलाह लें।

या

import os
def removeReturn(myField):
  s = myField.rstrip(os.linesep)
  return s

फ़ील्ड कैलकुलेटर का उपयोग करके रिटर्न वर्णों को निकालने का कोई विचार?


क्या आप सुनिश्चित हैं कि यह एक नया चरित्र है ("\ n")? इसके बजाय संभवतः एक गाड़ी वापसी ("आर") हो सकती है? इसके अलावा, सभी पंक्तियों में सभी मान अल्फा हैं, या हो सकता है कि इसके एक क्षेत्र में संख्यात्मक मान पर असफल हो? संभवतः str ((myField!)। Rstrip ('\ n')
RyanKDalton

कृपया त्रुटि संदेश और लाइन नंबर के साथ पूर्ण पायथन ट्रेसबैक पोस्ट करें, न कि आपके द्वारा प्राप्त की जा रही आर्कजीआईएस त्रुटि (जो सामान्य और अप्राप्य है)।
blah238

यह आर्कगिस में खुद को कुछ दिखना शुरू कर रहा है, क्योंकि दिए गए विभिन्न पायथन उत्तर सभी सही हैं।
सिंडी जयकुमार

क्या आपको कोई SyntaxError: EOL while scanning string literalत्रुटि हो रही है ?
blah238

मुझे यकीन नहीं है कि आयात करने वाले मॉड्यूल को कैलकुलेटर कैसे संभाल रहा है, लेकिन आप यह भी कोशिश कर सकते हैं: आयात फिर से करें और पुनः उपयोग करें।
टोमेक

जवाबों:


9

मुझे लगता है कि यह फील्ड कैलकुलेटर / कैलकुलेट फील्ड टूल के साथ पायथन पार्सर की सिर्फ एक बग / सीमा है। यदि टेक्स्ट फ़ील्ड के भीतर एक नई रेखा का सामना करना SyntaxError: EOL while scanning string literalपड़ता है, तो इससे कोई फर्क नहीं पड़ता कि आप क्या प्रयास करते हैं।

मैं 10.1 SP1 में इस मुद्दे को एक फाइल जियोडेटाबेस में निम्नलिखित सीएसवी फ़ाइल को आयात करके, एक फ़ील्ड जोड़कर और केवल Textफ़ील्ड कैलकुलेटर को पायथन पार्सर और अभिव्यक्ति के साथ नए क्षेत्र में कॉपी करने का प्रयास कर सकता हूं !Text!

आईडी, पाठ
1, "यह एक बहुस्तरीय है 
उदाहरण"

VB पार्सर पर स्विच करने की कोशिश करें, या एक का उपयोग करके UpdateCursorऔर पूरी तरह से फील्ड कैलकुलेटर से बचें।

इस मुद्दे पर भी इसी निष्कर्ष के साथ ESRI मंचों पर चर्चा की गई है:

एकमात्र प्रासंगिक NIM जो मैं पा सकता था, वह था:

  • NIM085499 - गैर- ASCII वर्णों का उपयोग करके कैलकुलेटफिल्ड कैलकुलेशन लिनक्स इंजन पर विफल रहता है: "ERROR 000539: सिंटैक्सैक्स: EOL स्ट्रिंग स्ट्रिंग शाब्दिक (, लाइन 1) स्कैन करते समय"।

4

वहाँ दो संभव समाधान मैं विश्वसनीय हो पाया है। किसी कारण से CartoPac लोगों को REMARKS फ़ील्ड में एक रिटर्न डालने की अनुमति देता है जहाँ मैं काम करता हूँ। उन से छुटकारा पाने के लिए, मैंने सबसे अच्छा काम करने के लिए जो समाधान पाया है, वह फ़ील्ड कैलकुलेटर का उपयोग कर रहा है।

अपने पार्सर को पायथन में बदलें। निम्नलिखित को पूर्व तर्क स्क्रिप्ट कोड में रखें:

def carriageReturnRemoval(remark):
    remark = remark.splitlines()
    separator = " -- "
    return separator.join(remark)

निम्नलिखित को अगले टेक्स्ट बॉक्स में डालें (यह एक REMARKS नामक क्षेत्र पर काम कर रहा है):

carriageReturnRemoval( !REMARKS! )

यहाँ छवि विवरण दर्ज करें

जब आपकी गाड़ी की वापसी हो जाती है, तो यह एक स्थान जोड़ देगा, - और प्रत्येक पंक्ति के बीच एक स्थान। यदि आप चाहें, तो आप "-" को एक अलग वर्ण या वर्णों में बदल सकते हैं। लेकिन मुझे यह पता चला है कि जिस तरह से मेरे निर्माण दल डेटा दर्ज करते हैं उसके आधार पर मेरे लिए सबसे अच्छा काम करते हैं। प्रत्येक कैरिज रिटर्न को पहचानने वाले कैरेक्टर पैटर्न को तोड़ते हुए यदि कोई पहचानने योग्य फ़ीचर पैटर्न हैं, तो वे नई विशेषता को दर्शाने के लिए फ़ील्ड में उपयोग करते हैं। और मुझे पहले स्थान पर सिरदर्द से बचाया)।

यदि आप ArcGIS में पायथन कंसोल का उपयोग करना पसंद करते हैं, तो आप काम करने के लिए उपरोक्त को संशोधित कर सकते हैं। हालाँकि मैंने पायथन कंसोल में कुछ सफलता के साथ भी यह कोशिश की है:

rows = arcpy.UpdateCursor("Assets\Welds")  
for row in rows:  
    hexString = str(row.REMARKS).encode("hex")  
    if "0a" in hexString:  
        hexString = hexString.replace("0a","")  
        row.REMARKS = hexString.decode("hex")  
        rows.updateRow(row)  

"एसेट्स वेल्ड्स" को उचित fc नाम से बदलें और पंक्ति को बदलें। REMARKS को पंक्ति के साथ बदलें (फ़ील्ड नाम यहाँ डालें)

ऊपर दिए गए कोड का उदाहरण देने से पहले आपको नीचे दी गई आयात लाइनों को चलाने की आवश्यकता हो सकती है या नहीं:

import arcpy  
import string

मैं इसे एक शॉट देता हूं, अगर आपके बयान के बाद आपके स्टेटमेंट की जरूरत है।
कलाकृति 21

अच्छी पकड़ ... जब मैं काम कर रहे पायथन कमांड विंडो स्क्रिप्ट से कॉपी किया तो यह ठीक से कॉपी नहीं हुआ।
ज़ाचरी ओरडो - जीआईएसपी

4

एक्सेल में उत्पन्न मेरी सुविधा वर्ग तालिका के बाद से इसके लिए काम निम्नलिखित एक्सेल कमांड का उपयोग करना था:

= स्वच्छ

सभी वापसी या नई लाइन वर्णों को निकालने की विधि। फिर आप तालिका को अपने जीआईएस डेटाबेस में शामिल या आयात कर सकते हैं।


3

मैंने पहली बार नई पंक्ति वर्णों का चयन करने के लिए SQL कथन का उपयोग किया है। में Select By Attributesसंवाद खिड़की:

"MY_FIELD" LIKE '%
 %'

आपको Enterपहले% के बाद प्रेस करना होगा ।


2
मुझे बस एहसास हुआ कि जब मुझे यह पता चला कि नई लाइन के पात्र कहां थे, तो मुझे भी MY_FIELD.strip()काम नहीं मिला , लेकिन क्योंकि मेरे पास केवल 5 रिकॉर्ड थे, इसलिए मैंने उन्हें मैन्युअल रूप से संपादित किया।
सिंडी जयकुमार

आप शायद उन्हें इस तरह का चयन कर सकते हैं और फिर पायथन अभिव्यक्ति के साथ मूल्यों की फिर से गणना करने के लिए फ़ील्ड कैलकुलेटर का उपयोग कर सकते हैं !MY_FIELD![:-1]- स्ट्रिंग स्लाइस को न्यूलाइन वर्ण को हटा देना चाहिए (यह मानते हुए कि न्यूलाइन के बाद कुछ भी नहीं आता है, जो ओपी के लिए मामला लगता है) ।
nmpeterson

3

!FieldName!.replace(chr(10), "").replace(chr(13), "")

फील्ड कैलकुलेटर थोड़ा उलझन में है जब यह जैसे दृश्यों से बचने के लिए आता है \nऔर \t। बस कच्चे चरित्र कोड का उपयोग करें।


इसके साथ अभी भी मिल रहा है SyntaxError: EOL while scanning string literal। VB parser ठीक काम करता है।
blah238

अभिव्यक्ति में और कोड ब्लॉक नहीं है? और केवल 10.0 पर?
जेसन शहीर

अभिव्यक्ति में, 10.1 SP1 पर।
blah238

2
myString = "My text\n"

print myString.strip()

क्षेत्र कैलकुलेटर में काम नहीं किया।
कलाकृति

क्या आपको पायथन समाधान या VBA (ArcGIS 9) समाधान की आवश्यकता है? पट्टी (), rstrip () और lstrip () केवल सिरों पर पात्रों के साथ सौदा करते हैं। यदि यह एक स्ट्रिंग के बीच में है, तो .replace ("\ n", "")
Dan

हाँ, मुझे क्षेत्र कैलकुलेटर के भीतर एक अजगर समाधान की आवश्यकता है। वापसी स्ट्रिंग के भीतर है अंत में नहीं। मैंने .replace ("\ n", "") की कोशिश की, हालाँकि मुझे एक सामान्य 000539 त्रुटि मिली।
कलाकृति

इस नंबर के साथ दी गई विशिष्ट पायथन त्रुटि क्या है?
दान

मेरे प्रश्न में त्रुटि संदेश पोस्ट किया।
कलाकृति

2

मुझे लगता है कि यह फील्ड कैलकुलेटर में प्री-लॉजिक स्क्रिप्ट कोड के रूप में काम करना चाहिए - लेकिन दुर्भाग्य से ऐसा नहीं लगता है। मैंने इसे वैसे भी पोस्ट किया है जब यह आपको एक वैकल्पिक दृष्टिकोण देता है जिसे आप काम करने के लिए ट्वीक कर सकते हैं।

def fix(teststring):
    parts = teststring.splitlines()
    newtest = ""
    for part in parts:
        newtest+=part
    return newtest

2

!field!उद्धरण और एक कच्चे स्ट्रिंग initializer के साथ अभिव्यक्ति में अपनी घोषणा को लपेटने की कोशिश करें , जैसे r"!field!"

str(!field!)साथ ही कोशिश करें ।


यह काम नहीं करता है। मैंने MYFIELD.replace(r"\n",""), but it doesn't see that I've escaped the newline character, it just fails with a EOL` त्रुटि की भी कोशिश की ।
सिंडी जयकुमार

आप सही हैं, मेरा दूसरा जवाब देखिए। इस एक को पोस्टेरिटी के लिए छोड़कर।
blah238
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.