从列valu获取行中的值

2024-06-07 00:57:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件,如下所示:

----------------------------------------------------------
|Student ID |   Name   | Username | Password | Moderator |
----------------------------------------------------------    
|   0001    | Foo Bar  |   test   |   abc123  |     N    |
|   0002    |  Baz Qux |   bob    |   bcd986  |     Y    |
----------------------------------------------------------

如何从列值获取行中的值?你知道吗

例如,如果我有用户名'test',如何在相应的行(Foo Bar)中获取'Name'的值?你知道吗


Tags: 文件csvnametestidfoousernamebar
3条回答

有几种方法可以完成你的任务。首先,正如@michaelg所建议的那样,使用pandas-它很快,而且库处理得很好。这里是pandas的链接。第二个选项是内置的csv module。在这里您可以找到一个简短的带有分隔符的scv reader示例。第三种选择是将.scv文件视为普通文件。例如

with open("test.csv", "r") as f:
    data = f.readlines()
    # we skip first line because it is your header,
    # e.g. id, name, pswd, etc.
    for line in data[1:]:
        for field in line.split("|"): # place your delimiter
            # strip data of leading and trailing whitespaces 
            print(field.strip()) 

您可以使用此方法搜索相应的值。上面的代码段将生成以下输出:

0001
Foo Bar
test
abc123
N

如果要通过索引访问值,请使用以下命令:

with open("test.csv", "r") as f:
    data = f.readlines()
    values = [x.split("|") for x in data[1:]]

上面的代码片段将为您提供这种格式的list,其中[[..], [..],..]是您文件的第1行,values[0][1]="Foo Bar"名称。你知道吗

格式不是真正的csv。你可以把它重写成有用的东西,然后用DictReader解析:

import csv

def rewriteCsv(filename): 
    """Rewrite silly file into something usefull"""
    header = None
    rwfn = "mod_"+filename
    with open (filename,"r") as r, open(rwfn,"w") as w:
        for row in r:
            if row.startswith(" -"):
                continue # skip it
            if not header:
                header = ','.join(x.strip() for x in row.split("|") if x.strip())
                w.write(header+'\n')
                continue

            w.write(','.join( x.strip() for x in row.strip()[1:-1].split("|") ) +"\n")
    return rwfn

def createFile(filename):
    """Create the silly file..."""
    with open(filename,"w") as f:
        f.write("""                             
|Student ID |   Name   | Username | Password | Moderator |
                                 
|   0001    | Foo Bar  |   test   |   abc123  |     N    |
|   0002    |  Baz Qux |   bob    |   bcd986  |     Y    |
                             
""")

createFile("file.txt") # create the silly one
fn = rewriteCsv("file.txt") # rewrite into something useful

with open(fn,"r") as r: 
    reader = csv.DictReader(r)
    for row in reader: # access earch ordered dict by columnname
        print(row["Student ID"], row["Name"], row["Username"])

用熊猫读取csv文件

import pandas as pd
# Here you can use pd.read_csv() instead
df = pd.read_clipboard(sep=',')

从列值访问行中的值

df[df.Username == 'test']['Name']

[输出]:

0    Foo Bar
Name: Name, dtype: object

如果需要结果作为字符串:

df[df.Username == 'test'].Name.values[0]

[输出]:

'Foo Bar'

相关问题 更多 >