我一直在尝试创建一个程序,要求输入名称和年龄,并将它们存储到文本文件中。我的代码如下:
name_age=open('Name Age.txt','a')
print('1. Writing to a text file')
print('2. Reading a text file')
print('3. Sorting')
Choice=int(input('What do you want to do: '))
if Choice==1:
Name=input('What is the Name: ')
Age=int(input('What is the age: '))
Name_Age=Name,Age
name_age.write(repr(Name_Age),'\n')
print('Written result')
if Choice==2:
name_age=open('Name Age.txt','r')
print('Reading the file')
print(name_age.read(1000))
if Choice==3:
print('Sorting')
print('1. Alphabetical')
print('2. Age')
Choice=int(input('How do you want to sort(1/2): '))
if Choice==1:
print('Sorting Alphabetically')
print(sorted(name_age))
if Choice==2:
print('Help Me HERE')
#I Need Help here... How do you sort the textfile with the ages???
然后我的代码能够允许用户从程序中读取文件并对结果进行排序。我可以按字母顺序对结果进行排序,但我无法按年龄顺序对它们进行排序。你能帮帮我吗
答案 0 :(得分:2)
您必须向我们展示您的文件的结构,但如果它类似于
mov edx, array ; [ebp + 8], right?
; then use edx instead of "array"... or so...
你可以做到
这可以通过在空格上拆分每一行,将其转换为bob 18
steve 28
mike 39
tom 22
,然后按元素print(sorted(name_age, key = lambda i : int(i.split()[1])))
中的数字而不是第一个元素(即其名称)进行排序。
编辑:
使用格式int
,您将使用
[1]
编辑2:
要从最高到最低排序,请使用Hanzalah, 14
参数
print(sorted(name_age, key = lambda i : int(i.split(',')[1])))
答案 1 :(得分:0)
您可以使用csv模块中的字典阅读器(DictReader)来分离读取输入文件内容和处理其内容。我们使用lambda函数来灵活选择要排序的字段。假设格式与@Cyber相同,您可以使用以下示例。
#Sample input file, eg, /tmp/sample.csv
name,age
bob,12
annie,20
suzie,5
wrothgar,15
以下是代码:
import csv
# You can change the path to your file accordingly
finput = file("/tmp/sample.csv",'r')
# Usually good to have this explicitly. You can use comma or tab, etc
delimiter=','
# Remove new line, then split the first line into the two fields
header = finput.readline().strip().split(delimiter)
# Let's create our reader, and extract the entries in the file
reader = csv.DictReader(finput, fieldnames=header, delimiter=delimiter)
entries = [entry for entry in reader]
# Perform additional type checking for your input and even cast the 'age' value here instead of in the lambda function below
# Let's sort using sorted its two parameters 'key' and 'reverse'
sorted(entries, key=lambda entry: int(entry['age'])) # Sort using the age field
sorted(entries, key=lambda entry: int(entry['age']), reverse=True) # Sort using the age field, in reverse order
sorted(entries, key=lambda entry: entry['name'])) # Sort using the name field
希望这能让您直观地使用sorted的'key'参数,其中sorted函数的比较器使用传递给'key'的值。使用csv模块的实用程序类应该有助于其他数据处理项目,例如DictWriter。
古德勒克!