簡體   English   中英

Python 3:如何讀取csv文件並將特定值存儲為變量

[英]Python 3: How to read a csv file and store specific values as variables

我是SO新手,還是編程新手,而python haha​​甚至更多,

我正在嘗試讀取CSV文件(它將包含不同的數據類型)並將特定的值(“坐標”)存儲為變量。

CSV文件示例(很抱歉使用代碼格式,文本不想保持安靜):

$id,name,last_name,age,phone_number,addrstr,addrnum
1,Constance,Harm,37,555-1234,Ocean_view,1
2,Homer,Simpson,40,555-1235,Evergreen_Terrace,742
3,John,Doe,35,555-1236,Fake_Street,123
4,Moe,Tavern,20,7648-4377,Walnut_Street,126

我想知道是否存在一些使用行作為索引來存儲特定值的簡便方法,例如:“將第2行存儲在變量名中,將第二個值存儲在變量名中,將第3個值存儲在變量Lastname中”,以及每個存儲的“行”會有所不同。

不知道這是否會有所幫助,因為我的編碼水平很差:

row = #this value will be taken from ANOTHER csv file
people = open('people.csv', 'r')
linepeople = csv.reader(people)
data = list(linepeople)
name = int(data[**row**][1])
lastname = int(data[**row**][2])
age = int(data[**row**][3])
phone = int(data[**row**][4])
addrstr = int(data[**row**][5])
addrnum = int(data[**row**][6])

我沒有發現任何非常相似的東西可以引導我找到解決方案。 (我一直在閱讀有關字典的信息,也許對我有幫助?)

編輯 (請讓我知道是否不允許編輯問題):感謝您的解決方案,我開始了解各種可能性,但讓我提供有關預期輸出的更多信息:

我試圖創建一個“通用”函數,以在給定的行/列中僅獲取一個值,並將該單個值存儲到變量中,而不是整個行或整個列中。

示例:需要將John Doe的電話號碼(第5列,第4行)存儲到變量中,以便在打印該變量時輸出為:555-1236

您可以逐行進行迭代。 注意示例代碼,您正在嘗試將人的名字轉換為整數...

for row in linepeople:
    name=row['name']
    age = int(row['age'])

如果您打算做更復雜的事情,我推薦熊貓。 對於初學者,它將嘗試將數字列轉換為浮點型,您可以使用屬性符號訪問它們。

import pandas as pd
import numpy as np
people = pd.read_table('people.csv', sep=',')

people.name  #  all the names
people.loc[0:2] # first two rows

您可以使用CSV DictReader,它會根據您的CSV列名稱在每行的基礎上自動分配字典名稱,如下所示:

import csv

with open("input.csv", "r") as f_input:
    csv_input = csv.DictReader(f_input)

    for row in csv_input:
        id = row['$id']
        name = row['name']
        last_name = row['last_name']
        age = row['age']
        phone_number = row['phone_number']
        addrstr = row['addrstr']
        addrnum = row['addrnum']

        print(id, name, last_name, age, phone_number, addrstr, addrnum)

這將打印出您的CSV條目,如下所示:

1 Constance Harm 37 555-1234 Ocean_view 1
2 Homer Simpson 40 555-1235 Evergreen_Terrace 742
3 John Doe 35 555-1236 Fake_Street 123
4 Moe Tavern 20 7648-4377 Walnut_Street 126

如果僅需要名稱列表,則可以按以下方式構建它們:

with open("input.csv", "r") as f_input:
    csv_input = csv.DictReader(f_input)
    names = []

    for row in csv_input:
        names.append(row['name'])

    print(names)

給予:

['Constance', 'Homer', 'John', 'Moe']

隨着問題的改變,將需要一種完全不同的方法。 一個簡單的get row / col類型函數可以工作,但是效率很低。 每次都需要讀取該文件。 更好的方法是使用類。 這將一次加載文件,然后您可以根據需要獲得任意數量的條目。 可以按照以下步驟進行:

import csv

class ContactDetails():
    def __init__(self, filename):
        with open(filename, "r") as f_input:
            csv_input = csv.reader(f_input)
            self.details = list(csv_input)

    def get_col_row(self, col, row):
        return self.details[row-1][col-1]

data = ContactDetails("input.csv")

phone_number = data.get_col_row(5, 4)
name = data.get_col_row(2,4)
last_name = data.get_col_row(3,4)

print "%s %s: %s" % (name, last_name, phone_number)

通過使用該類,該文件僅被讀取一次。 這將打印以下內容:

John Doe: 555-1236

請注意,Python數字從0開始索引,因此對於Python,您的5,4必須轉換為4,3。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM