2016-02-22 2 views
0
output_filename = r"C:\Users\guage\Output.txt" 
RRA: 
GREQ-299684_6j 
GREQ-299684_6k 
CZM: 
V-GREQ-299684_6k 
V-GREQ-299524_9 
F_65624_1 
R-GREQ-299680_5 
DUN: 
FB_71125_1 
FR: 
VQ-299659_18 
VR-GREQ-299659_19 
VEQ-299659_28 
VR-GREQ-299659_31 
VR-GREQ-299659_32 
VEQ-299576_1 
GED: 
VEQ-299622_2 
VR-GREQ-299618_13 
VR-GREQ-299559_1 
VR-GREQ-299524_14 
FB_65624_1 
VR-GREQ-299645_1 
MNT: 
FB_71125_1 
FB_71125_2 
VR-534_4 

Ce qui précède est le contenu du fichier .txt. comment puis-je le lire séparément le contenu de celui-ci. par exemple -comment lire le contenu du fichier .txt en utilisant python?

RRA:VR-GREQ-299684_6j VR-GREQ-299684_6k VR-GREQ-299606_3 VR-GREQ-299606_4 VR-GREQ-299606_5 VR-GREQ-299606_7 

et de l'enregistrer dans une variable ou quelque chose de similaire. Plus tard, je veux lire CZM séparément et ainsi de suite. J'ai fait comme ci-dessous.

with open(output_filename, 'r') as f: 
     excel = f.read() 

Mais comment le lire séparément? quelqu'un peut-il me dire comment le faire?

+0

On dirait que le caractère ':' dans votre fichier texte peut être exploité pour cela ... – Ian

+0

Avez-vous essayé d'utiliser regex pour s Cherchez-vous un motif (par exemple n'importe quel nombre de lettres et un deux-points?). Ensuite, vous pouvez ajouter chacune des variables suivantes à une liste jusqu'à ce que vous atteigniez la suivante. – CodeMonkey

+0

Essayez-vous de lire le fichier ligne par ligne ou voulez-vous obtenir les sections délimitées par les lignes avec les deux-points? – jsfan

Répondre

2

Vous pouvez utiliser le fichier texte : comme indicateur pour créer un nouveau fichier comme ceci:

savefilename = "" 
with open(filename, 'r') as f: 
    for line in f: 
     line = line.strip() # get rid of the unnecessary white chars 
     lastchar = line[-1:] # get the last char 
     if lastchar == ":": # if the last char is ":" 
      savefilename = line[0:-1] # get file name from line (except the ":") 
      sf = open(savefilename + ".txt", 'w') # create a new file 
     else: 
      sf.write(line + "\n") # write the data to the opened file 

Ensuite, vous devriez obtenir collection de fichiers:

RRA.txt 
CZM.txt 
DUN.txt 
# etc 

qui contient toutes les données appropriées:

RRA.txt 

VR-GREQ-299684_6j 
VR-GREQ-299684_6k 
VR-GREQ-299606_3 
VR-GREQ-299606_4 
VR-GREQ-299606_5 
VR-GREQ-299606_7 

CZM.txt 

VR-GREQ-299684_6k 
VR-GREQ-299606_6 
VR-GREQ-299606_8 
VR-GREQ-299640_1 
VR-GREQ-299640_5 
VR-GREQ-299524_9 
FB_65624_1 
VR-GREQ-299680_5 

DUN.txt 

FB_71125_1 

# and so on 

Vous pouvez remplacer le sf = open et le sf.write qui, quelle que soit la meilleure façon de séparer les données. Ici, j'utilise des fichiers ...

+0

il ne génère pas le savefilename. ou je ne reçois pas de collection de fichiers. – sam

+0

@sam où est votre dossier de projet? Vérifiez-le. Ça devrait être là. J'utilise PyCharm pour tester et avec le compilateur Python 3.x. Un réglage est-il différent du vôtre? – Ian

+0

J'utilise python 2.7. output_filename = r "C: \ Utilisateurs \ guage \ Sortie.txt". donc je remplace le nom de fichier avec output_filename. – sam

0

Vous pouvez itérer sur le fichier et utiliser les lignes et les index à votre avantage; quelque chose comme ceci:

with open(output_filename, 'r') as f: 
    for index, line in enumerate(f): 
     # here you have access to each line and its index 
     # so you can save any number of lines you wish 
0

Qu'en est-il lire dans une liste, puis traiter son élément que vous préférez

>>> f = open('myfile.txt', 'r').readlines() 
>>> len(f) 
46 
>>> f[0] 
RRA: 

>>> f[-1] 
VR-GREQ-299534_4 

>>> f[:3] 
['RRA:\n', 'VR-GREQ-299684_6j \n', 'VR-GREQ-299684_6k \n'] 
>>> 
>>> [l for l in f if l.startswith('FB_')] 
['FB_65624_1 \n', 'FB_71125_1 \n', 'FB_69228_1 \n', 'FB_65624_1 \n', 'FB_71125_1 \n', 'FB_71125_2 \n'] 
>>> 
3

Quelque chose comme ceci:

def read_file_with_custom_record_separator(file_path, delimiter='\n'): 
    fh = open(file_path) 
    data = "" 
    for line in fh: 
     if line.strip().endswith(delimiter) and data != "": 
      print "VARIABLE:\n<", data, ">\n" 
      data = line 
     else: 
      data += line 
    print "LAST VARIABLE:\n<", data, ">\n" 

Et puis:

read_file_with_custom_record_separator("input.txt", ":")