Tôi là người mới bắt đầu sử dụng Python không có kiến thức cơ bản về CNTT [Tôi quan tâm đến việc phát triển kiến thức của mình từng bước về CNTT]. Cho đến nay tôi đã viết các tập lệnh đơn giản bằng Python và tôi đã gặp sự cố. Tôi đã tìm kiếm trên Google, tuy nhiên tôi không tìm thấy câu trả lời thỏa đáng nào có thể giúp tôi - Vì vậy, tôi quyết định viết ở đây
Tôi đang gặp khó khăn trong việc xác định các bản sao trong tệp CSV. Tệp CSV của tôi chứa các liên hệ từ cơ sở dữ liệu. Mỗi cột tương ứng với dữ liệu cụ thể [tên, họ, chức danh công việc, công ty, email, ID liên hệ, v.v. ]. Trong cơ sở dữ liệu này có các bản sao và tôi muốn đọc qua cơ sở dữ liệu này và xác định các email trùng lặp. Nếu tập lệnh tìm thấy email trùng lặp, thì tập lệnh sẽ ghi địa chỉ email, ID liên hệ vào một tệp riêng biệt - tạo tệp mới chỉ bao gồm các bản sao. Có ai có thể giúp tôi với nhiệm vụ này?
Trân trọng,
nấm lim xanh
csv trùng lặp python
0 0
Chia sẻ
- 5 Cộng tác viên
- 8 Trả lời
- 9K Lượt xem
- 5 ngày Khoảng thời gian thảo luận
- Bài đăng mới nhất Bài đăng mới nhất của vegaseat
Câu trả lời được đề xuất
Đã trả lời bởi woooee 814 trong một
Bạn nên sử dụng một từ điển để lưu trữ các e-mail trong một từ điển nếu nó chưa có ở đó. Nếu nó ở đó, thì nó là một bản sao. Tôi khuyên bạn nên lưu trữ bản ghi gốc và bản sao vì chúng có thể khác nhau và bạn muốn giữ…
Đã được trả lời bởi rrashkin 41 trong một
Khi bạn xác định một bản sao, giả sử có 2 bản sao, cả hai đều được ghi vào tệp hay chỉ bản sao không được ghi đầu tiên?
Tất cả 8 câu trả lời
woooee 814 Gần thành Maven đăng bài Bạn nên sử dụng một từ điển để lưu trữ các e-mail trong một từ điển nếu nó chưa có ở đó. Nếu nó ở đó, thì nó là một bản sao. Tôi khuyên bạn nên lưu trữ bản ghi gốc và bản sao vì chúng có thể khác nhau và bạn muốn giữ bản ghi chính xác chứ không phải bản ghi đầu tiên được tìm thấy 0 0 Chia sẻ mgunia 0 Áp phích dành cho người mới đây không phải là vấn đề vì các bản sao được phát hiện sẽ được đánh dấu là "email trùng lặp" trong cơ sở dữ liệu và do đó bị bỏ qua. Vì vậy sẽ không có thông tin nào bị bỏ sót. Vấn đề đối với tôi là vận hành từ điển. Tôi không biết làm cách nào để viết tập lệnh có nội dung "nếu email trùng lặp, hãy thêm vào tệp - và chỉ thêm ID liên hệ và địa chỉ email" 0 0 Chia sẻ rrashkin 41 Áp phích đào tạo dành cho trẻ em Khi bạn xác định một bản sao, giả sử có 2 bản sao, cả hai đều được ghi vào tệp hay chỉ bản sao không được ghi đầu tiên? 0 0
Chia sẻ
mgunia 0 Áp phích dành cho người mới
10 năm trướcRrashkin thân mến, vấn đề là tôi không biết làm cách nào để xác định các bản sao. Như tôi đã viết, tôi khá mới với Python và tôi không có nền tảng về CNTT [vì vậy tôi không thể so sánh nó với các ngôn ngữ lập trình khác]. Tôi cho rằng tôi nên tạo một vòng lặp và "bảo" Python so sánh mọi bản ghi với toàn bộ cơ sở dữ liệu - tương tự như trong Excel sử dụng hàm Countif trong đó có Phạm vi và Tiêu chí. Nhưng làm cách nào để làm rõ rằng "tiêu chí" của tôi sẽ là địa chỉ email [là cột thứ 26 trong cơ sở dữ liệu của tôi] và nó phải được so sánh với "Phạm vi" sẽ là toàn bộ cơ sở dữ liệu?
0 0
Chia sẻ
rrashkin 41 Áp phích đào tạo dành cho trẻ em
10 năm trướcCâu hỏi của tôi thực sự là sau khi bạn xác định một bản sao [bây giờ đừng bận tâm đến cách bạn làm điều đó], sau đó bạn có 2 bản ghi giống nhau, giả sử, giá trị trường email. Tiếp theo là gì?
0 0
Chia sẻ
Ene Uran 638 Đăng Virtuoso
10 năm trướcĐiều này có thể cung cấp cho bạn một vài gợi ý
''' csv_rread102.py
find duplicate email addresses in a csv file
'''
# csv type test data
# name, surname, job_title, company, email
csv_data = '''\
Arden,Adam,clerk,ACME Tools,aaden@gmail.com
Bison,Bert,manager,Ideal Plumbing,bertbison@idel.com
Clark,Clara,assistant,ACME Tools,clarkc@gmail.com
Arden,Adam,supervisor,ACME Tools,aaden@gmail.com
Clark,Clara,receptionist,ACME Homes,clarkc@gmail.com
'''
import csv
fname = "aaa_test7.csv"
# write the test data file
with open[fname, "w"] as fout:
fout.write[csv_data]
# read the test data file back in
with open[fname, "r"] as fin:
reader = csv.reader[fin]
# create a dictionary of email:frequency pairs
email_freq = {}
for row in reader:
print[row] # test
name, surname, job_title, company, email = row
email_freq[email] = email_freq.get[email, 0] + 1
print['-'*70]
# refresh reader object
with open[fname, "r"] as fin:
reader = csv.reader[fin]
# make a list of all rows that have duplicate emails
duplicate_emails = []
for row in reader:
name, surname, job_title, company, email = row
# add row to list if email frequency is above 1
if email_freq[email] > 1:
duplicate_emails.append[row]
# show results
import pprint
pprint.pprint[email_freq]
print['-'*70]
pprint.pprint[sorted[duplicate_emails]]
''' my result >>>
['Arden', 'Adam', 'clerk', 'ACME Tools', 'aaden@gmail.com']
['Bison', 'Bert', 'manager', 'Ideal Plumbing', 'bertbison@idel.com']
['Clark', 'Clara', 'assistant', 'ACME Tools', 'clarkc@gmail.com']
['Arden', 'Adam', 'supervisor', 'ACME Tools', 'aaden@gmail.com']
['Clark', 'Clara', 'receptionist', 'ACME Homes', 'clarkc@gmail.com']
----------------------------------------------------------------------
{'aaden@gmail.com': 2, 'bertbison@idel.com': 1, 'clarkc@gmail.com': 2}
----------------------------------------------------------------------
[['Arden', 'Adam', 'clerk', 'ACME Tools', 'aaden@gmail.com'],
['Arden', 'Adam', 'supervisor', 'ACME Tools', 'aaden@gmail.com'],
['Clark', 'Clara', 'assistant', 'ACME Tools', 'clarkc@gmail.com'],
['Clark', 'Clara', 'receptionist', 'ACME Homes', 'clarkc@gmail.com']]
'''
0 0
Chia sẻ
mgunia 0 Áp phích dành cho người mới
10 năm trướcCảm ơn bài viết của bạn Ene Uran. Mã hoạt động với tôi khi nó giống như bản gốc. Tuy nhiên, tôi có tệp CSV hiện có với toàn bộ cơ sở dữ liệu mà tập lệnh này sẽ đọc qua. Vấn đề là, khi tôi thay thế các giá trị đã nhập trong csv_data thành đường dẫn của tệp csv, nó sẽ trả về lỗi về số lượng giá trị không đủ [được xác định trong dòng 23]. Tôi cho rằng phần này - "tên, họ, chức danh công việc, công ty, email = hàng" đang tạo ra vấn đề này và nó nên được thay thế bằng một thứ gì đó phù hợp
Tệp của tôi chứa đầy các cột khác nhau. Tuy nhiên, tôi chỉ cần cột số 1 [ID liên hệ] và cột số 25 [địa chỉ email]. Tôi nên sửa đổi mã này như thế nào để chỉ nhận được kết quả cuối cùng với 2 cột đó?