Hướng dẫn read csv tab delimited python - đọc python được phân tách bằng tab csv

Tôi hiện có một tệp CSV, khi được mở trong Excel, có tổng cộng 5 cột. Chỉ các cột A và C có ý nghĩa đối với tôi và dữ liệu trong các cột còn lại là không liên quan.

Bắt đầu trên dòng 8 và sau đó làm việc theo bội số của 7 [ví dụ: dòng 8, 15, 22, 29, 36, v.v.], tôi đang tìm cách tạo ra một từ điển với Python 2.7 với thông tin từ các trường này. Dữ liệu trong cột A sẽ là khóa [số nguyên 6 chữ số] và dữ liệu trong cột C là giá trị tương ứng cho khóa. Tôi đã cố gắng làm nổi bật điều này dưới đây nhưng định dạng không phải là tốt nhất:-

    A        B      C          D
1                           CDCDCDCD  
2                           VDDBDDB
3
4
5
6
7  DDEFEEF                   FEFEFEFE
8  123456         JONES
9
10
11
12
13
14
15 293849         SMITH

Theo những điều trên, tôi đang tìm cách trích xuất giá trị từ A7 [DDEFEEF] làm khóa trong Từ điển và "Fefefefe" là dữ liệu tương ứng và sau đó thêm một mục khác vào từ điển của tôi, nhảy đến dòng 15 với "2938495" Key và "Smith" là giá trị tương ứng.

Bất kỳ đề xuất? Tệp nguồn là một tệp .txt với các mục được phân chia theo tab. Cảm ơn

Clarification:

Chỉ để làm rõ, cho đến nay, tôi đã thử dưới đây:-

import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row

Trên đây chỉ đơn giản là in ra tất cả nội dung mặc dù một hàng tại một thời điểm. Tôi đã thử "cho hàng [7] trong đầu đọc" nhưng điều này đã trả lại một lỗi. Sau đó tôi đã nghiên cứu nó và đi ở bên dưới nhưng nó cũng không hoạt động:

import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns

Để đọc các tệp giá trị được phân tách bằng tab với Python, chúng tôi sẽ tận dụng thực tế là chúng tương tự như CSV. Chúng tôi sẽ sử dụng thư viện Python từ

import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
3 và bảo nó chia mọi thứ với các tab thay vì dấu phẩy. Chỉ cần đặt đối số
import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
4 thành
import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
5.

Ví dụ: hãy nói rằng chúng tôi có dữ liệu sau trong

import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
6:

Name	Color	Ranking
Apple	Red	5
Kiwi	Green	9
Durian	Brown	10

Bạn có thể đọc nó như thế này:

import csv

with open["fruits.tsv", "r", encoding="utf8"] as fruits_file:
    tsv_reader = csv.DictReader[fruits_file, delimiter="\t"]
    for fruit in tsv_reader:
        name = fruit["Name"]
        ranking = fruit["Ranking"]
        print[f"{name} is rank {ranking}"]

Ngoài ra, bạn có thể đọc mọi thứ theo hàng:

import csv

with open["fruits.tsv", "r", encoding="utf8"] as fruits_file:
    tsv_reader = csv.reader[fruits_file, delimiter="\t"]

    # Skip the first row, which is the header
    next[tsv_reader]

    for row in tsv_reader:
        [name, color, ranking] = row
        print[f"{name} is rank {ranking}"]

Đó là nó! Chỉ cần nói với mô -đun

import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
3 rằng nó phân chia tệp theo các tab, không phải dấu phẩy và bạn đã đặt tất cả.

Giới thiệu

Một tệp được phân phối theo tab là một định dạng văn bản nổi tiếng và được sử dụng rộng rãi để trao đổi dữ liệu. Bằng cách sử dụng cấu trúc tương tự như bảng tính, nó cũng cho phép người dùng trình bày thông tin theo cách dễ hiểu và chia sẻ trên các ứng dụng - bao gồm các hệ thống quản lý cơ sở dữ liệu quan hệ.

Tiêu chuẩn IANA cho các giá trị được phân tách theo tab yêu cầu dòng đầu tiên của tệp chứa tên trường. Ngoài ra, các dòng khác [đại diện cho các bản ghi riêng biệt] phải có cùng một số cột.

Các định dạng khác, chẳng hạn như các giá trị được phân tách bằng dấu phẩy, thường đặt ra thách thức khi phải thoát khỏi dấu phẩy, thường xuyên trong văn bản [trái ngược với các tab].

Mở tệp bằng Python

Trước khi chúng tôi đi sâu vào việc xử lý các giá trị được phân tách tab, chúng tôi sẽ xem xét cách đọc và ghi các tệp bằng Python. Ví dụ sau sử dụng chức năng tích hợp

import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
8 để mở tệp có tên người chơi.txt nằm trong thư mục hiện tại:
import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
8
built-in function to open a file named players.txt located in the current directory:

1    with open['players.txt'] as players_data:
2    	players_data.read[]

Python

Hàm

import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
8 chấp nhận một tham số tùy chọn cho biết cách sử dụng tệp. Nếu không có, chế độ chỉ đọc được giả định. Các lựa chọn thay thế khác bao gồm, nhưng không giới hạn,
import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
0 [mở để viết ở chế độ cắt ngắn] và
import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
1 [mở để viết ở chế độ phụ trợ].
import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
8
function accepts an optional parameter that indicates how the file will be used. If not present, read-only mode is assumed. Other alternatives include, but are not limited to,
import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
0
[open for writing in truncate mode] and
import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
1
[open for writing in append mode].

Sau khi nhấn Enter hai lần để thực thi bộ trên, chúng ta sẽ thấy các tab [\ t] giữa các trường và ngắt dòng mới [\ n] làm dấu phân cách ghi trong Hình 1:\t] between fields, and new line breaks [\n] as record separators in Fig. 1:

Mặc dù chúng tôi sẽ chủ yếu quan tâm đến việc trích xuất dữ liệu từ các tệp, chúng tôi cũng có thể viết cho họ. Một lần nữa, lưu ý rằng việc sử dụng \ n ở đầu để chỉ một bản ghi mới và các trường riêng biệt:\n at the beginning to indicate a new record and \t to separate fields:

1    with open['players.txt', 'a'] as players_data:
2    	players_data.write['\n{}\t{}\t{}\t{}\t{}\t{}\t{}'.format['Trey', 'Burke', '23', '1.85', '2013', '79.4', '23.2']]

Python

Mặc dù chức năng

import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
2 giúp dễ đọc, có nhiều phương pháp hiệu quả hơn để xử lý cả đọc và viết - tất cả đều có sẵn trong cùng một mô -đun trong thư viện tiêu chuẩn. Điều này đặc biệt quan trọng nếu chúng ta đang xử lý các tệp lớn.
import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
2
function helps with readability, there are more efficient methods to handle both reading and writing - all available within the same module in the standard library. This is particularly important if we are dealing with large files.

Giới thiệu mô -đun CSV

Mặc dù nó được đặt tên theo các giá trị được phân tách bằng dấu phẩy, mô -đun CSV có thể quản lý các tệp được phân tích cú pháp bất kể phân cách trường - có thể là tab, thanh dọc hoặc bất cứ thứ gì khác. Ngoài ra, mô -đun này cung cấp hai lớp để đọc và ghi dữ liệu vào từ điển Python [tương ứng là DicTreader và Dictwriter]. Trong hướng dẫn này, chúng tôi sẽ tập trung vào trước đây.CSV module can manage parsed files regardless of the field delimiter - be it tabs, vertical bars, or just about anything else. Additionally, this module provides two classes to read from and write data to Python dictionaries [DictReader and DictWriter, respectively]. In this guide we will focus on the former exclusively.

Trước hết, chúng tôi sẽ nhập mô -đun CSV:CSV module:

Tiếp theo, chúng tôi sẽ mở tệp ở chế độ chỉ đọc, khởi tạo đối tượng đầu đọc CSV và sử dụng nó để đọc một hàng tại một thời điểm:

1    with open['nba_games_november2018_visitor_wins.txt', newline = ''] as games:                                                                                          
2    	game_reader = csv.reader[games, delimiter='\t']
3    	for game in game_reader:
4    		print[game]

Python

Mặc dù nó không hoàn toàn cần thiết trong trường hợp của chúng tôi, chúng tôi sẽ chuyển

import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
3 như một đối số cho hàm
import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
8 theo tài liệu mô -đun. Nếu tệp của chúng tôi chứa các dòng mới bên trong các trường được trích dẫn, điều này đảm bảo rằng chúng sẽ được xử lý chính xác.
import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
3
as an argument to the
import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
8
function as per the module documentation. If our file contains newlines inside quoted fields, this ensures that they will be processed correctly.

Hình 2 cho thấy mỗi hàng được đọc vào một danh sách sau khi bộ trên được thực hiện:

Mặc dù điều này chắc chắn trông tốt hơn nhiều so với phiên bản trước của chúng tôi, nơi các tab và dòng mới được trộn với nội dung thực tế, nhưng vẫn còn chỗ để cải thiện.

Lớp Dictreader

Để bắt đầu, chúng tôi sẽ tạo một danh sách trống nơi chúng tôi sẽ lưu trữ từng trò chơi dưới dạng từ điển riêng biệt:

Cuối cùng, chúng tôi sẽ lặp lại cùng một mã như trên chỉ với một thay đổi nhỏ. Thay vì in từng hàng, chúng tôi sẽ thêm nó vào games_list. Nếu bạn đang sử dụng Python 3.5 trở lên, bạn có thể bỏ qua

import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
5 và sử dụng
import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
6 thay thế. Trong Python 3.6 trở lên, chức năng này được sử dụng để biến từ điển theo thứ tự thành một thông thường để dễ đọc hơn và thao tác dễ dàng hơn.games_list. If you are using Python 3.5 or older, you can omit
import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
5
and use
import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
6
instead. In Python 3.6 and newer, this function is used to turn the ordered dictionary into a regular one for better readability and easier manipulation.

1    with open['nba_games_november2018_visitor_wins.txt', newline = ''] as games:                                                                                          
2    	game_reader = csv.DictReader[games, delimiter='\t']
3    	for game in game_reader:
4    		games_list.append[dict[game]]

Python

Chúng ta có thể tiến thêm một bước và sử dụng danh sách hiểu để chỉ trả về những trò chơi trong đó điểm khách truy cập lớn hơn 130. Câu lệnh sau đây tạo ra một danh sách mới có tên là Visiter_Big_Score_Games và đưa nó vào mỗi trò chơi bên trong Games_list nơi điều kiện là đúng:visitor_big_score_games and populates it with each game inside games_list where the condition is true:

import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
0

Python

Bây giờ chúng tôi có một danh sách các từ điển, chúng tôi có thể viết nó vào một bảng tính như được giải thích trong việc nhập dữ liệu từ các tệp Microsoft Excel với Python hoặc thao túng nó khác. Một tùy chọn khác bao gồm viết danh sách được chuyển đổi thành chuỗi thành một tệp văn bản đơn giản có tên visitor_big_score_games.json để phân phối ở định dạng JSON:visitor_big_score_games.json for distribution in JSON format:

import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
1

Python

Hàm

import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
7 yêu cầu một chuỗi làm đối số. Đó là lý do tại sao chúng tôi phải chuyển đổi toàn bộ danh sách thành một chuỗi trước khi thực hiện thao tác ghi.
import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
7
function requires a string as an argument. That is why we had to convert the entire list into a string before performing the write operation.

Nếu bạn chỉ muốn xem danh sách, không biến nó thành bảng tính hoặc tệp JSON, bạn có thể sử dụng thay thế

import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
8 để hiển thị nó ở định dạng thân thiện với người dùng như trong Hình 3:
import csv
from itertools import islice

entries = csv.reader[open["myfile", 'rb']]
mydict = {'key' : 'value'}

for i in xrange[6]:
    mydict['i[0]] = 'I[2]    # integers representing columns
    range = islice[entries,6]
    for entry in range:
        mydict[entries[0] = entries[2]] # integers representing columns
8
to display it in a user-friendly format as shown in Fig. 3:

import csv

mydict = {:}
f = open["myfile", 'rt']
reader = csv.reader[f]
    for row in reader:
        print row
2

Python

Như bạn có thể thấy, khả năng là vô tận và giới hạn duy nhất là trí tưởng tượng của chúng tôi!

Bản tóm tắt

Trong hướng dẫn này, chúng tôi đã học cách nhập và thao tác dữ liệu từ các tệp được chọn bằng tab với Python. Đây không chỉ là một kỹ năng có giá trị cao đối với các nhà khoa học dữ liệu, mà còn cho các nhà phát triển web và các chuyên gia CNTT khác.

Chủ Đề