我将第一行的文件作为"标题"在其余行中识别字符串及其位置。
文件包含的示例:
"Headline","Newspaper", "Year Published", "Author"
"Crash", "New York Times", "2001", "Smith"
"Fire", "Washington Post", "2010", "Dudley"
"Addiction", "National Enquirer", "2008", "Kuhn"
我已经实现了第一个字符串将成为我字典的键,字符串的其余部分将成为该键的值。现在,我在字典中的值将自己显示为列表。如何更改我的代码以使字典中的值显示为元组?此外,我的代码是在我的键和值上添加一组额外的引号,我试图摆脱它们(见下文)。我还尝试了一个if语句和.isdigit()来识别和删除所有数字上的引号,这些数字将成为字典中值的一部分。
我继续说:
{'"Crash"':[' "New York Times"',' "2001"', '"Smith"'],
'"Fire"':[' "Washington Post"',' "2010"', '"Dudley"']} etc.
我想要的时候:
{"Crash":( "New York Times", 2001, "Smith"),
"Fire":( "Washington Post", 2010, "Dudley")} etc.
我的代码:
def read_file(filename):
d={}
f= open(filename,"r")
first_line = f.readline()
for line in f:
line=line.strip('"')
data=line.split(",")
key_data=data[0]
values_data= data[1:5]
valuesindate=tuple(values_data)
d[key_data]=values_data
tupval=tuple(d.values())
for i in d.values():
if i.isdigit():
line=line.strip('"')
line = line.split()
line[-1] = line[-1].strip('"\n')
floats = [float(i) for i in line]
else:
pass
print(d)
read_file(".file0.csv")
忘了提及我(不幸的是)我没有使用csv模块。这肯定会让我的生活变得更轻松。
答案 0 :(得分:1)
更新:
这里'a'是您从文件中读取的行/行:
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>
我看到你在这里分配其余的名单:
a = '"Crash", "New York Times", "2001", "Smith"'
a = a.replace('"', '') # remove "
a = a.split(',') #create list
a = [int(i) if i.strip().isdigit() else i.strip() for i in a] # convert "2001" to 2001 in the list, this will take care of all such integers
d[a[0]] = tuple(d[a[1:]]) # update your dict
如果你想要一个元组,你应该这样做:
d[key_data]=values_data
或者你已经拥有
d[key_data]= tuple(values_data)
DO
valuesindate=tuple(values_data)
为了摆脱“在行字符串中的每个元素周围,你需要在分割它之前对行字符串执行string.replace()
答案 1 :(得分:0)
以下是我如何解决这个问题。您可以删除无关的"
字符,并将', '
上的每一行拆分(逗号后跟空格)。使用元组解包将每个字段分配给适当命名的变量,然后使用这些变量构造字典的元组。
def read_file(filename):
d = {}
with open(filename) as f:
next(f) # skip header row
for line in f:
headline, newspaper, year_published, author = line.strip().replace('"').split(', ')
d[headline] = (newspaper, int(year_published), author)
return d
您也可以处理每一行而不解压缩变量并使用拆分行的第一项作为键,但是,解压缩到命名变量提供了一定级别的文档并且非常清楚它是什么,特别是当它到来时将年份转换为整数。