Ich habe eine txt-Datei mit seven columns and no headers. Zwischen den ersten beiden Spalten befindet sich ein Leerzeichen. Danach dienen Semikolons als Begrenzer.

Folgendes habe ich versucht, bevor mir klar wurde, dass die Datei nicht einheitlich war:

 min17_q1 = open('ES 03-17.Last.txt', 'r')
 for line in min17_q1:
    fields = line.split(";")
    Date = fields[0]
    Time = fields[1]
    Open = fields[2]
    High = fields[3]
    Low = fields[4]
    Close = fields[5]
    Volume = fields[6]
    print(DateTime + Open + High + Low + Close + Volume)

Wie kann ich diese Datei einlesen und dann die Daten bearbeiten und / oder identische Dateien an diese anhängen?

0
user9050939 18 Apr. 2018 im 12:52

3 Antworten

Beste Antwort

Um eine solche Zeile aus Ihrer Datei zu analysieren, teilen Sie sie im ersten Bereich mit { {X0}}, dann erneut in Semikolons aufteilen:

for line in min17_q1:
    Date, fields = line.split(" ", 1)
    Time, Open, High, Low, Close, Volume = fields.split(';')
    print(Date + Time + Open + High + Low + Close + Volume)

Verwenden Sie eine Schleife, um mehrere dieser Dateien zu verketten:

with open('output.txt') as outfile:
    # iterate over the files that need to be concatenated
    for infile in ['min17_q1', 'min17_q2', 'min17_q3']:
        with open(infile) as infile:
            # parse each line in the file and add it to the output file
            for line in infile:
                line = line.replace(' ', ';', 1)
                outfile.write(line)

In diesem Fall ist es nicht einmal erforderlich, jede Zeile in eine Liste aufzuteilen. Wir können einfach das erste Leerzeichen in der Zeile durch ein Semikolon ersetzen und es zurückschreiben. Zu diesem Zweck habe ich str.replace(' ', ';', count=1) verwendet.

1
Aran-Fey 18 Apr. 2018 im 10:50
import re,os

outputfile = open('outfile.txt','a')

for all_files in os.listdir(os.getcwd()):
        if re.match(r'samp.*',all_files):
                min_file = open(all_files, 'r')
                for line in min_file:
                        fields=re.split(r'[ ;]',line.strip())
                        c=';'.join(fields)
                        #print c
                        outputfile.write(c)
                        outputfile.write('\n')
                min_file.close()
outputfile.close()
1
learner 18 Apr. 2018 im 11:09

Dies kann mit einem einzigen Split erfolgen:

for line in min17_q1:
    Date, Time, Open, High, Low, Close, Volume = line.replace(' ',';',1).split(';')
    print(Date + Time + Open + High + Low + Close + Volume)

Und die umgekehrte Operation:

line = "%s %s;%s;%s;%s;%s;%s" % (Date, Time, Open, High, Low, Close, Volume)
1
sciroccorics 18 Apr. 2018 im 10:12