从列值中获取行中的值
Getting a value in a row from a column value
我有一个如下所示的 csv 文件:
----------------------------------------------------------
|Student ID | Name | Username | Password | Moderator |
----------------------------------------------------------
| 0001 | Foo Bar | test | abc123 | N |
| 0002 | Baz Qux | bob | bcd986 | Y |
----------------------------------------------------------
我如何从列值中获取行中的值?
例如,如果我有用户名 'test',我如何在相应的行 (Foo Bar) 中获取 'Name' 的值?
正在使用 pandas
读取 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'
格式不是真正的 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"])
有几个选项可以完成您的任务。 First,正如@michaelg 建议的那样,使用 pandas
- 它速度很快,库处理得很好。这是 pandas. Second option would be a build in csv module 的 link。在那里您可以找到带有分隔符的 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
这种格式 [[..], [..],..]
其中 values[0]
是你的文件的第 1 行并且 values[0][1]
= "Foo Bar"
名字.
我有一个如下所示的 csv 文件:
----------------------------------------------------------
|Student ID | Name | Username | Password | Moderator |
----------------------------------------------------------
| 0001 | Foo Bar | test | abc123 | N |
| 0002 | Baz Qux | bob | bcd986 | Y |
----------------------------------------------------------
我如何从列值中获取行中的值?
例如,如果我有用户名 'test',我如何在相应的行 (Foo Bar) 中获取 'Name' 的值?
正在使用 pandas
读取 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'
格式不是真正的 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"])
有几个选项可以完成您的任务。 First,正如@michaelg 建议的那样,使用 pandas
- 它速度很快,库处理得很好。这是 pandas. Second option would be a build in csv module 的 link。在那里您可以找到带有分隔符的 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
这种格式 [[..], [..],..]
其中 values[0]
是你的文件的第 1 行并且 values[0][1]
= "Foo Bar"
名字.