【问题标题】:Adding an x number of new lines to the end of a file Python在文件 Python 的末尾添加 x 个新行
【发布时间】:2016-06-06 20:58:03
【问题描述】:

我有多个要循环的文件。如果单个文件没有一定的长度,那么我想屏蔽该文件中的行,以便不使用它,但是对于我将来需要做的某些计算,形状保持不变。到目前为止,这是我拥有的代码:

pattern = "C:\Users\Name\Folder\july\mid_2014-07-2?-00.csv"
bad_files=[]
for filename in glob.iglob(patterm):
    num_lines = sum(1 for line in open(filename))
    if num_lines!=144:
        s = 144 - num_lines
        bad_files.append(filename)
print bad_files  

到目前为止,这会返回一个列表,其中包含所有不包含 144 行的文件。我想要做的是如果文件中没有 144 行(例如说它有 127 行),那么我想在文件末尾添加 's' 的空白行数以使其有 144 行.然后我想屏蔽文件中的所有行,以便为我想要使用它做的事情保持形状,但这些行不会用于某些计算。有没有办法在这个循环中添加一条语句,在文件末尾添加“s”个空行,以及一条屏蔽坏文件中每一行的语句?有没有更简单的方法来实现我应该考虑的目标?

【问题讨论】:

  • 这个我没测试过,但是不禁想知道是不是像filename.write('\n' * s)这么简单。
  • @MattCremeens 它有效。刚刚启动了解释器并对其进行了测试。
  • 谢谢@ThomasMurphy。另外,不确定“...屏蔽坏文件中的每一行”是什么意思?
  • 您确定没有文件的行数超过总行数吗?
  • 感谢您回答我的问题的第一(大部分)部分以添加“s”行数!我所说的掩码的意思是我想看看我是否可以使用 numpy.ma 掩码函数来隐藏坏文件中的值。据我了解,这使我可以在不使用这些值进行计算的情况下保持一切相同的形状。我确定没有超过 144 行的文件。

标签: python add mask lines


【解决方案1】:

如果您真的不需要处理文件名列表,则可以折叠为:

for filename in glob.iglob(pattern):
    with open(filename, 'r+a') as fd:
        for num_lines, line in enumerate(fd): pass
        # num_lines is now one *less* that the actual line count.
        fd.write('\n' * max(0, 144 - num_lines))

请注意,您不能执行 filename.write(),因为文件名是字符串。 write 作用于文件描述符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2011-01-06
    相关资源
    最近更新 更多