Ten skrypt odczytuje plik tekstowy, bierze średnicy każdego 3 wierszy dla każdej kolumny i pisze go w pliku CSV:

Plik wejściowy:

2013-08-29T15:11:18.55912   0.019494552 0.110042184 0.164076427 0.587849877
2013-08-29T15:11:18.65912   0.036270974 0.097213155 0.122628797 0.556928624
2013-08-29T15:11:18.75912   0.055350041 0.104121094 0.121641949 0.593113069
2013-08-29T15:11:18.85912   0.057159263 0.107410588 0.198122695 0.591797271
2013-08-29T15:11:18.95912   0.05288292  0.102476346 0.172958062 0.591139372
2013-08-29T15:11:19.05912   0.043507861 0.104121094 0.162102731 0.598376261
2013-08-29T15:11:19.15912   0.068343545 0.102805296 0.168517245 0.587849877
2013-08-29T15:11:19.25912   0.054527668 0.105765841 0.184306818 0.587191978
2013-08-29T15:11:19.35912   0.055678991 0.107739538 0.169997517 0.539165352

Scenariusz:

data = loadtxt('infile.txt', usecols = (1,2,3,4))
with open ('out.csv', 'wb') as outfile:
    writer = csv.writer(outfile, delimiter = '\t')
    seg_len = 3       
    for x in range(0, len(data[:,1]), seg_len):
        sample_means = ([x/seg_len], [mean(data[x:x+seg_len,i]) for i in range(4)])
        bi = list(chain.from_iterable(sample_means))
        writer.writerow ((', '.join(map(repr, bi))))

Wyjście plik CSV:

0    0.037038...    0.10379...  ...
1    0.051183...    0.10466...  ...
2    00059516...    0.10543...  ...

Ale kiedy otworzę kolumny plików i sumy CSV, daje zero! Wygląda na to, że nie są liczbami. Skopiowałem bezpośrednio z pliku CSV i wygląda tak:

"0      "   "   0   .   0   3   7   0   3   8   5   2   2   3   3   3   3   3   3   3   3       "   "   0   .   1   0   3   7   9   2   1   4   4   3   3   3   3   3   3   3   2       "
"1      "   "   0   .   0   5   1   1   8   3   3   4   7   9   9   9   9   9   9   9   9   7       "   "   0   .   1   0   4   6   6   9   3   4   2   6   6   6   6   6   6   6   6       "
"2      "   "   0   .   0   5   9   5   1   6   7   3   4   6   6   6   6   6   6   6   6   1       "   "   0   .   1   0   5   4   3   6   8   9   1   6   6   6   6   6   6   6   6       "

Czy ktoś może doradzić, jak to rozwiązać?

0
PyLearner 26 listopad 2013, 01:46

2 odpowiedzi

Najlepsza odpowiedź

Może tego szukasz?

sample_means = [x/seg_len] + [mean(data[x:x+seg_len,i]) for i in range(4)]
writer.writerow(sample_means)
4
freakish 25 listopad 2013, 21:58

Częścią twojego problemu jest to, że writerow oczekuje iterable wartości. Dajesz mu ciąg (wyjście ', '.join), więc każda litera w ciągu jest zapisana do pliku w oddzielnym polu rozdzielonym. Jeśli przejdziesz bi bezpośrednio do pisakarza, należy przynajmniej rozwiązać ten konkretny problem.

0
Peter DeGlopper 25 listopad 2013, 21:55