提问人:user159 提问时间:9/6/2023 更新时间:9/6/2023 访问量:30
定义函数参数和列表迭代
Defining Function Arguments and List Iteration
问:
我对 Python 非常陌生,但有 javascript 方面的经验。下面是我的程序的一部分,由于未定义“remove_comment_lines”中的参数“data”而未运行。我怎样才能在不使用“全局”的情况下定义数据并将其用作指定函数的参数,因为我的教授不允许这样做。
读取文件并返回字符串格式的行列表
def read_data(data):
with open("in.dat", "r") as f:
data = f.readlines()
f.close()
return data
read_data("in.dat")
# Takes a list of lines as input and returns a new list of lines with the
# comment lines (the ones that begin with #) removed.
def remove_comment_lines(data):
with open("in.dat", "w") as f1:
for number, data in enumerate(data):
if number not in [0,1,2]:
f1.write(data)
f1.close()
remove_comment_lines(data)
这是文件“in.dat”
# read from file data about one day
# format: start_time:end_time:#steps
09.30AM:09.45AM:220
11.45AM:12.23PM:300
11.45AM:10.23AM:302
2.45PM:3.23PM:202
3.45PM:3.53PM:90
5.45PM:5.53PM:80
6.45PM:7.23PM:1000
10.45PM:10.53PM:102
我已经尝试了我能想到的一切。我希望函数打开文件“indat”并删除以“#”开头的行并返回一个由行分隔的列表。
答:
0赞
richard
9/6/2023
#1
with
上下文管理器不要求您使用 。
您可以使用 to 移动到循环/文件的下一次迭代,而不是写入行。
https://onlinegdb.com/Fr3wQYvoDf.close()
if line.startswith('#'): continue
def read_data(data):
with open("in.dat", "r") as f:
data = f.readlines()
return data
# Takes a list of lines as input and returns a new list of lines with the
# comment lines (the ones that begin with #) removed.
def remove_comment_lines(data):
with open("in.dat", "w") as f:
for line in data:
if line.startswith('#'): continue
f.write(line)
# read file as list of lines and save to variable
data = read_data("in.dat")
# pass data to remove comment function
remove_comment_lines(data)
0赞
Swifty
9/6/2023
#2
如果您希望该函数返回行列表,如前所述,而不是清理文件,这里有一个工作函数:
def read_data_and_filter_out_comments(filename):
with open(filename, "r") as f:
return [line for line in f.readlines() if not line.startswith('#')]
out_data = read_data_and_filter_out_comments('in.dat')
# ['09.30AM:09.45AM:220\n', '11.45AM:12.23PM:300\n', '11.45AM:10.23AM:302\n', '2.45PM:3.23PM:202\n', '3.45PM:3.53PM:90\n', '5.45PM:5.53PM:80\n', '6.45PM:7.23PM:1000\n', '10.45PM:10.53PM:102']
上一个:在函数中将属性作为参数发送
评论
data
因为不需要输入。你可以这样做,然后当你调用这个函数时,你需要将这个函数的输出分配给一个变量,比如说:希望它有帮助。如果您有更多疑问,请告诉我read_data
read_data()
data = read_data()
if not line.startswith('#'):