Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅删除某些文件的前10行_Python_R_Bash - Fatal编程技术网

Python 仅删除某些文件的前10行

Python 仅删除某些文件的前10行,python,r,bash,Python,R,Bash,我目前正在分析管道输出中给出的文件。我正在处理csv文件,其结构是: sample,acc,count https//:url0.com,LS4456,10 https//:url1.com,LS4465,15 问题是,当找不到某个文件时,某些文件的管道实际上会占用很多文件,在csv格式的部分之前放置十行作为日志: some useless log information... 1 some useless log information... 2 some useless log infor

我目前正在分析管道输出中给出的文件。我正在处理csv文件,其结构是:

sample,acc,count
https//:url0.com,LS4456,10
https//:url1.com,LS4465,15
问题是,当找不到某个文件时,某些文件的管道实际上会占用很多文件,在csv格式的部分之前放置十行作为日志:

some useless log information... 1
some useless log information... 2
some useless log information... 3
some useless log information... 4
some useless log information... 5
some useless log information... 6
some useless log information... 7
some useless log information... 8
some useless log information... 9
sample,acc,count
https//:url0.com,LS4456,10
https//:url1.com,LS4465,15
我有274个文件,其中一些有日志部分,其他没有。使用R、python或bash删除日志部分的前10行文件是否有一种有效的方法

基本思想是: 打开文件;
如果第一个单词不是示例,则删除前9行

尝试此操作。它会删除其中包含单词“some”的所有记录

# Create dataframe
df <- data.frame(
  x1 = c(
    'some useless log information... 1',
    'some useless log information... 2',
    'some useless log information... 3',
    'some useless log information... 4',
    'some useless log information... 5',
    'some useless log information... 6',
    'some useless log information... 7',
    'some useless log information... 8',
    'some useless log information... 9',
    'sample,acc,count',
    'https//:url0.com,LS4456,10',
    'https//:url1.com,LS4465,15'
      ))

# Keep only records that do not contain 'some'
df <- subset(df, regexpr(pattern ='some',df$x1) == -1)
您可以使用获取目录中除子目录以外的所有文件的列表。要从文件中删除第一行,您应该重写它。这就是为什么我们首先使用file.readlines将文件内容读入列表。然后我们使用file.writelines将切片列表写入文件。我们找到从样本开始的第一行的索引,并从这一行切片源列表。如果你确定它总是9行,你可以用f.writelineslines[10:]替换它

代码:


使用R,您可以首先获得所有文件的路径

all_files <- list.files("/path/of/the/files", full.names = TRUE)

使用变量检查有效性:

awk 'NR==1 && !($0 ~ /^sample/) {skip=1} skip != 1 || NR >= 10 {print}' file.txt
1 fread使用我们在注释末尾重复生成的文件Minardi.csv,使用data.table fread函数,该函数接受一个用于跳过的字符串,以便跳过该字符串第一次出现之前的所有行。如果可以返回data.table,则省略data.table=FALSE参数

library(data.table)
fread("Minardi.csv", skip = "sample", data.table = FALSE)
给予:

            sample    acc count
1 https//:url0.com LS4456    10
2 https//:url1.com LS4465    15
1a如果垃圾行不包含任何逗号,则此替代方案也适用:

fread("Minardi.csv", sep = ",", data.table = FALSE)
# Windows
read.csv(pipe("findstr , Minardi.csv"), as.is = TRUE)

# Linux
read.csv(pipe("grep , Minardi.csv"), as.is = TRUE)
2基本R基本R解决方案是:

read.csv("Minardi.csv", as.is = TRUE,
   skip = if (grepl("sample", readLines("Minardi.csv", 1))) 0 else 9)
2a如果垃圾行不包含逗号,则这也适用:

fread("Minardi.csv", sep = ",", data.table = FALSE)
# Windows
read.csv(pipe("findstr , Minardi.csv"), as.is = TRUE)

# Linux
read.csv(pipe("grep , Minardi.csv"), as.is = TRUE)
笔记
您还可以添加已经失败的示例代码吗?也许只使用一种语言。否则,这太宽泛了,因为它需要一个多语言的解决方案。实际上,我什么也没做,这些文件在我的大学服务器上,我不敢做任何事情,直到我确定我不会删除任何文件。服务器每月使用140个内核创建这些文件,所以你只想匹配文件中的单词log并删除该行?或者日志是真实的日志?基本思想是:浏览所有文件,如果第一个单词不是示例,请删除前9行并从头到尾删除,它们应该可以解决您的问题。至少在这两者结合的情况下,中间有一个Unix管道;由于post没有为任务指定任何语言/库,因此最好解释运行代码所需的设置。
Lines <- "some useless log information... 1
some useless log information... 2
some useless log information... 3
some useless log information... 4
some useless log information... 5
some useless log information... 6
some useless log information... 7
some useless log information... 8
some useless log information... 9
sample,acc,count
https//:url0.com,LS4456,10
https//:url1.com,LS4465,15"

writeLines(Lines, "Minardi.csv")