01/10/2018, 10:19

Hỏi về cách lấy dữ liệu từ file txt trong Python

Chào tất cả mọi người!
Chuyên ngành của mình không phải là CNTT nên gặp khó khăn trong việc sử dụng Python.
Nay mình cần lấy dữ liệu từ file .txt để làm số liệu đầu vào cho chương trình tính.

  • Các số liệu được sắp xếp theo ma trận gồm các dòng, mỗi dòng có 8 cột, và giờ mình muốn chuyển tất cả các số liệu trên về 1 cột ( dòng thứ nhất chuyển về cột xong lại tiếp dòng thứ 2… cứ tiếp cho đến hết số liệu).
  • Trong các file input txt thì có đoạn text ban đầu, vậy mình phải dùng lệnh như thế nào để chỉ đọc được các dữ liệu từ dòng có các số mà thôi.? mình có thử dùng file.readline() nhưng vẫn chưa chọn dòng được.
    Hy vọng các bạn giúp mình trả lời. Cám ơn các bạn.
    Dưới đây là bảng số liệu với một ít số liệu ban đầu.

Origin Time 2011/03/11 14:46:00
Lat. 38.103
Long. 142.860
Depth. (km) 24
Mag. 9.0
Station Code MYG009
Station Lat. 38.4466
Station Long. 140.8874
Station Height(m) 25
Record Time 2011/03/11 14:46:50
Sampling Freq(Hz) 100Hz
Duration Time(s) 300
Dir. E-W
Scale Factor 3920(gal)/6182761
Max. Acc. (gal) 548.010
Last Correction 2011/03/11 14:46:35
Memo.
-34827 -34807 -34792 -34798 -34790 -34790 -34791 -34771
-34767 -34770 -34785 -34825 -34815 -34775 -34792 -34825
-34829 -34813 -34768 -34737 -34784 -34850 -34825 -34740
-34710 -34772 -34862 -34875 -34798 -34758 -34811 -34818
-34758 -34763 -34794 -34761 -34755 -34822 -34852 -34811
-34797 -34813 -34795 -34767 -34774 -34826 -34844 -34767
-34735 -34815 -34853 -34804 -34772 -34775 -34779 -34800
-34808 -34757 -34741 -34809 -34822 -34778 -34807 -34842
-34812 -34796 -34793 -34787 -34808 -34796 -34761 -34801

Khoa NTA viết 12:31 ngày 01/10/2018

Bạn dùng file_instance.readlines() trả về 1 list, từng phần tử tương ứng với từng dòng.

>>> fin = open('file.txt')
>>> fin_data = fin.readlines()
>>> print ''.join(fin_data[fin_data.index('Memo. \n') + 1:])
-34827 -34807 -34792 -34798 -34790 -34790 -34791 -34771
-34767 -34770 -34785 -34825 -34815 -34775 -34792 -34825
-34829 -34813 -34768 -34737 -34784 -34850 -34825 -34740
-34710 -34772 -34862 -34875 -34798 -34758 -34811 -34818
-34758 -34763 -34794 -34761 -34755 -34822 -34852 -34811
-34797 -34813 -34795 -34767 -34774 -34826 -34844 -34767
-34735 -34815 -34853 -34804 -34772 -34775 -34779 -34800
-34808 -34757 -34741 -34809 -34822 -34778 -34807 -34842
-34812 -34796 -34793 -34787 -34808 -34796 -34761 -34801
>>> # cái đó cho bạn biết sau khi join() thì nó như vậy đấy
>>> ''.join(fin_data[fin_data.index('Memo. \n')+1:]).split()
['-34827', '-34807', '-34792', '-34798', '-34790', '-34790', '-34791', '-34771', 
'-34767', '-34770', '-34785', '-34825', '-34815', '-34775', '-34792', '-34825', 
'-34829', '-34813', '-34768', '-34737', '-34784', '-34850', '-34825', '-34740', 
'-34710', '-34772', '-34862', '-34875', '-34798', '-34758', '-34811', '-34818', 
'-34758', '-34763', '-34794', '-34761', '-34755', '-34822', '-34852', '-34811', 
'-34797', '-34813', '-34795', '-34767', '-34774', '-34826', '-34844', '-34767', 
'-34735', '-34815', '-34853', '-34804', '-34772', '-34775', '-34779', '-34800', 
'-34808', '-34757', '-34741', '-34809', '-34822', '-34778', '-34807', '-34842', 
'-34812', '-34796', '-34793', '-34787', '-34808', '-34796', '-34761', '-34801']
>>> fin.close()

Đã có thông tin bạn cần, giờ chỉ cần parse int là ok

P/s: Mình chỉ định gợi ý nhưng thôi lỡ rồi nên gõ ra luôn, vấn đề này không hề khó, khuyên bạn lần sau tự ngâm cứu - chỉ có tự học và tự nghiền ngẫm thì mới mau tiến bộ được, mau tiến bộ theo ý mình có nghĩa là giác ngộ ra tư duy lập trình sớm hơn các bạn hỏi bài tập

Anh Tuan Cao viết 12:31 ngày 01/10/2018

Sr bạn, trước khi đặt câu hỏi này mình đã đắn đo rồi. Thật ra mình mới học Python có 3 ngày thôi, và mình biết đây là diễn đàn của các bạn bên Công Nghệ Thông Tin nên những câu như thế này có thể quá đơn giản với các bạn.
Tính chất công việc hơi gấp nên mình phải lên đây hỏi. Mong bạn thông cảm.

Khoa NTA viết 12:33 ngày 01/10/2018

Không sao, đa số các bạn gấp thì mới nhớ tới diễn đàn mà ._. hồi sớm mình còn thấy có người hỏi cả bài tập tiếng anh cơ

Chuyên ngành của mình không phải CNTT, bắt tay cái haha. Mình nói vậy cũng chỉ muốn khuyên bạn thôi, không có ý gì quá xấu đâu

Bài liên quan
0