为整个文件目录更改一行*.csv文件的脚本?

2024-09-29 22:52:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于在Windows7中编写命令提示符脚本(DOS)的问题。你知道吗

我的任务是: 我有一个原始数据文件目录(*.csv),其中第38行是保存日期和时间的地方。 示例文件单元A38: 开始日期/时间:2014年6月20日13:26:16

但是,此日期格式为M/DD/YYYY,因为它是使用设置了计算机日期的采样计算机保存的。 我知道有一种方法可以编写一个脚本,可以在这些文件的目录中执行,这样就不会更改任何其他信息(文本或实际时间戳), 但日期格式改为英国的DD/MM/YYYY格式。你知道吗

预期产品: 文件以任何方式保持不变,但第38行显示 开始日期/时间:20/06/2014 13:26:16

我真的不想通过和这样做,以800多个文件,更多的即将到来,所以任何帮助将非常感谢在帮助做这个格式的变化 可以在*.csv文件的整个目录中执行的脚本格式。你知道吗

我还认为需要注意的是,整个文本以及实际日期和时间都在Excel(A38)的一个单元格中(开始日期/时间:M/D/YYYY HH:MM:SS) 我想把时间定为24小时。你知道吗

任何指导/指针都会很好。我对Windows下的命令行编程非常陌生。我也很高兴看到这样一个脚本是否适用于Ubuntu环境,或者python脚本,或者任何能够自动完成这项繁琐任务的东西,即将一行的一部分更改近1000次,因为将更改过的目录切换回Windows计算机根本不是什么大事。只是更简单(而且我确信使用命令提示符)你知道吗

干杯, 沃尔


Tags: 文件csv文本目录脚本windows格式计算机
2条回答

我没有一个示例文件,但是sed应该是。。。你知道吗

sed /(.*?,){37}/ s/([0-9]{1,2})\/([0-9]{2})\/([0-9]{4})/\2\/\1\/\3/

你可以通过以下方法来完成:

for file in /path/to/files/*.csv
do
    sed -ri".bak" /(.*?,){37}/ s/([0-9]{1,2})\/([0-9]{2})\/([0-9]{4})/\2\/\1\/\3/ file
done

现在在GnuWin32的sed上测试。你知道吗

# INFILE @ /test/a.csv
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2/20/2014
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,12/31/2014
# INFILE @ /test/b.csv
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7/11/2014
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5/18/1987

# Command line command
C:\>FOR %f IN (C:\test\*.csv) DO sed -ri".bak" "/(.*?,){37}/ s/([0-9]{1,2})\/([0-9]{2})\/([0-9]{4})/\2\/\1\/\3/" %f

# OUTFILE @ /test/a.csv
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20/2/2014
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,31/12/2014
# OUTFILE @ /test/b.csv
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,11/7/2014
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18/5/1987

所以你的选择大致是:

  • Python

  • Windows“cmd”脚本

  • 将文件传输到*nix环境中,如果您比较熟悉,可以使用这些工具在那里进行操作

如果使用Python,请看:

  • os模块,os.listdir()os.path等。

  • 使用函数替换Regex(re.sub使用函数而不是字符串作为替换)

  • datetime.datetime.strptimedatetime.datetime.strftime

相关问题 更多 >

    热门问题