2016-06-22 4 views
0

ist ein Beispiel dessen, was auf der Textdatei, die ich gesucht habe:Python: Wie kann ich eine Textdatei nach einer Zeichenfolge durch den Benutzer suchen, die eine ganze Zahl enthält? Diese

15 - Project `enter code here`Name 
APP_IDENTIFIER=ie.example.example 
DISPLAY_NAME=Mobile Banking 
BUNDLE_VERSION=1.1.1 
HEADER_COLOR=#72453h 
ANDROID_VERSION_CODE=3 


20 - Project Name 
APP_IDENTIFIER=ie.exampleTwo.exampleTwp 
DISPLAY_NAME=More Mobile Banking 
BUNDLE_VERSION=1.2.3 
HEADER_COLOR=#23456g 
ANDROID_VERSION_CODE=6 

Wenn zum Beispiel der Benutzer in 15, Ich möchte Python die folgenden Informationen kopieren:

ie.example.example 
Mobile Banking 
1.1.1 
#72453h 
3 

, weil ich es in eine andere Textdatei kopieren muss.

Ich bekomme den Benutzer zur Eingabe einer Projektnummer (in diesem Beispiel sind die Projektnummern 15 & 20) und dann brauche ich das Programm zum Kopieren der app_identifier, display_name, bundle_version und android_version des Projekts in Bezug auf die Nummer, die die Benutzereingabe.

Wie bekomme ich Python, um die Textdatei nach der vom Benutzer eingegebenen Nummer zu durchsuchen und nur die benötigten Informationen aus den Zeilen direkt unter diesem bestimmten Projekt zu nehmen?

Ich habe ein ganzes Programm geschrieben, aber das ist nur ein Teil davon. Ich habe noch keinen Code, um die spezifischen Informationen zu finden und zu kopieren, die ich brauche. Hier Code i für das Projekt ID zu suchen haben

while True: 
    CUID = int(input("\nPlease choose an option:\n")) 
    if (CUID) == 0: 
     print ("Project one") 
     break 
    elif (CUID) == 15: 
     print ("Project two") 
     break 
    elif (CUID) == 89: 
     print ("Project three") 
     break 
    else: 
     print ("Incorrect input") 

Die Lösung dank Conor:

projectFile = open("C:/mobileBuildSettings.txt" , "r") 
for line in projectFile: 
    CUID = str(CUID) 
    if CUID + " - " in line: 
      appIdentifier = next(projectFile).split("=")[1] 
      displayName = next(projectFile).split("=")[1] 
      bundleVersion = next(projectFile).split("=")[1] 
      next(projectFile) 
      androidVersionCode = next(projectFile).split("=")[1] 

      print (appIdentifier, displayName, bundleVersion,  androidVersionCode) 

      break 
+0

@cdarke das ist, was ich für die Benutzereingabe haben: #User Eingang ein CUDID während Getreu gewählt: CUID = int (Eingang ("\ nBitte wählen Sie eine Option: \ n")) if (CUID) == 0: print ("My CU") Pause elif (CUID) == 15: print ("Ihre CU") Pause elif (CUID) == 89: print ("Die CU") break sonst: drucken ("Falscher Eingang") Ich bin neu in stackoverflow, ich weiß nicht, wie man Code zu Kommentaren richtig fügt – Jill

+0

Ihr Code würde viel besser als Ergänzung zu Ihrer Hauptfrage passen. Klicken Sie unten auf der Frage auf den Link "Bearbeiten", fügen Sie Ihren Code hinzu und bearbeiten Sie ihn. –

+0

Welche Informationen möchten Sie hier bekommen? Ich meine, was ist Information? Wenn Sie Werte erhalten wollen, gibt es eine einfache Lösung. Aber Ihr Code tut nichts außer dem Vergleichen der Projektnummer. – hzleonardo

Antwort

1
projectfile = open("projects", "r") 
    for line in projectfile: 
     if CUID in line: 
      appIdentifier = next(projectfile).split("=")[1] 
      displayName = next(projectfile).split("=")[1] 
      bundleVersion = next(projectfile).split("=")[1] 
      next(projectfile) 
      androidVersionCode = next(projectfile).split("=")[1] 

      # Do whatever with the 4 values here, call function etc. 

      break 

tun dann mit appIdentifier, display, bundleVersion & androidVersionCode, was Sie, sie nur die Werte nach dem '=' zurückkehren wird.

Obwohl ich empfehlen würde gegen generische Suche nach einer ganzen Zahl, was ist, wenn die ganze Zahl auch in der Bundle oder Android-Version ist?

+0

Brilliant vielen Dank Conor du warst eine große Hilfe! Ich habe in meinem Hauptquest Ihren Code hinzugefügt, den ich ein bisschen änderte, um zu tun, was ich brauchte. So erfreut danke: D – Jill

+0

Ich habe den folgenden Code hinzugefügt, um Python zu finden, die Int brauche ich und nicht einige zufällige, die in der Bundle oder Android-Version sein könnte! Hoffentlich wird es den Job machen, ich werde es in einer Minute testen. wenn CUID + "-" in Zeile: – Jill

1

Es gibt keinen Grund, alle einzelnen Zahlen in einer langen if..else Liste. Sie können eine regular expression verwenden, um zu überprüfen, ob eine Zeile mit eine beliebige Ziffer beginnt. Wenn dies der Fall ist, überprüfen Sie, ob es mit der Nummer übereinstimmt, die Sie suchen. Wenn dies nicht der Fall ist, überspringen Sie die folgenden Zeilen, bis Sie das Trennzeichen für leere Zeilen erreicht haben.

Sobald Sie die Daten, die Sie suchen haben, können Sie einen regulären Ausdruck verwenden wieder den =, zu finden oder verwenden Sie einfach .find:

import re 
numberToLookFor = '18' 
with open("project.txt") as file: 
    while True: 
     line = file.readline() 
     if not line: 
      break 
     line = line.rstrip('\r\n') 
     if re.match('^'+numberToLookFor+r'\b', line): 
      while line and line != '': 
       if line.find('='): 
        print line[line.find('=')+1:] 
       line = file.readline().rstrip('\r\n') 
     else: 
      while line and line != '': 
       line = file.readline().rstrip('\r\n') 
+0

Vielen Dank für Ihre Hilfe! – Jill

1

Hier gehen Sie:

while True: 
    CUID = int(input("\nPlease choose an option:\n")) 
    if (CUID) == 0: 
     appid = value.split("APP_IDENTIFIER=")[1] # get the value after "APP_IDENTIFIER=" 
     print appid 
     output >>> ie.example.example 

Sie können den gleichen Code für alle Werte anwenden, ändern Sie einfach den Titel vor "=".

Holen Sie die gesamte Zeile aus dem Text und erhalten Sie nur den Wert nach "=" mit diesem Code für die Ergebnisausgabe.

+0

Vielen Dank für Ihre Hilfe! – Jill

Verwandte Themen