我是python的初学者.. 我的数据线看起来像这样
2015-04-18 10 101011
2015-04-18 10 102000
2015-04-18 20 222222
2015-04-18 20 100000
如果下面提到的使用()的字符是10,我想将其替换为1 2如果是20
2015-04-18 10 101011 to 2015-04-18 1 101011
2015-04-18 20 101011 to 2015-04-18 2 101011
我逐行阅读
with open("test.txt",'r') as f:
file = f.readlines()
for each in file:
我将如何在这里给出一个if语句......
答案 0 :(得分:1)
正则表达式是可能的,但可能有点矫枉过正。以下是使用split()
的解决方案:
DATA =\
"""2015-04-18 10 101011
2015-04-18 10 102000
2015-04-18 20 222222
2015-04-18 20 100000"""
def process_data(data):
substitutions = {'10':'1', '20':'2', '30':'3'}
for line in data.splitlines():
components = line.split()
components[1] = substitutions[components[1]]
yield ' '.join(components)
if __name__ == '__main__':
for line in process_data(DATA):
print(line)
<强>输出强>
2015-04-18 1 101011
2015-04-18 1 102000
2015-04-18 2 222222
2015-04-18 2 100000
<强>假设强>
由于您的问题中没有明确的细节,我将列出我对此实施所做的假设:
components[1]
将导致IndexError
被提升。Otherwise ' '.join(components)
将生成与原始行间距不同的行。对输入(“10”和“20”)与其替换(“1和2”)之间的关系没有做出任何假设。从这个非常小的数据集看起来像f(x) = x/10
,但只有你肯定知道。如有必要,您可以根据您的使用情况调整替换逻辑。
答案 1 :(得分:1)
使用app.Use(async (context, next) =>
{
if (context.Request.IsHttps)
await next();
else
{
var sslPortStr = ((sslPort == 0) || (sslPort == 443)) ? string.Empty : ($":{sslPort}");
var sslUrl = $"https://{context.Request.Host.Host}{sslPort}{context.Request.Path}";
context.Response.Redirect(sslUrl);
}
});
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
函数与替换回调的解决方案:
re.sub
输出:
def shortenDigits(m):
d = {'10': '1', '20': '2', '30': '3'}
val = m.group(2)
return m.group(1) + (val if val not in d else d[val])
with open('test.txt', 'r') as fh:
lines = fh.readlines()
replaced = [re.sub(r'^(\d{4}-\d{2}-\d{2} )(\d{2})', shortenDigits, l) for l in lines]
print(replaced)