繁体   English   中英

将行从一个文件复制到另一个文件

[英]Copy lines from one file to another

我尝试创建一个脚本,允许我指定一个输入文件并从该文件中取出行并将它们复制到一个指定的目标文件中。 到目前为止,我已经能够非常接近我的目标但是我遇到的问题以及我似乎无法找到答案(我至少可以理解)是当我搜索我的数据字符串时单词“not”或“is”或任何其他脚本术语在我的字符串中就像它一样,这意味着如果我搜索“这不是我想要的”这样的东西,它会将not运算符置于行动中并且不会复制任何内容。 所以我想我的问题是我能做些什么才能阻止这种情况发生(我已将我的脚本添加到底部,善待它是我的第一次尝试=)

我的第二个问题可能是要求程序稍微多一些,但无论如何我都会问它。 就像上面说的那样,我有一个包含1000行内容的txt文件(单个行不像一个段落),其中250个以“这是我要复制的行”开头,但后面每个人都说出一个个别原因(这是我要复制的线因为它真棒,导致它的紫色。等等)因为它现在坐在我的脚本将只拉第一个“这是我要复制的部分”并留下它,是否有一个让它从所有线中抓取其余的字符串?

这可能是一件容易的事情,但是因为我试图通过试验和错误进行自我教育,我在故障排除中遇到的一些术语与我遇到的问题一样令人困惑=)

#This will let you search for a string in a file and transfer it to another file
#It will search for texts or numbers

print "This is a tool to search one file and transfer information to another."
print
#select source file
a=open(raw_input("Enter full path of source file using using \\ instead of \: "), "r")
#select destination file
b=open(raw_input("Enter full path of destination file using \\ instead of \: "), "a")       
a
b
#actual copy command
copy=raw_input("What are you searching for: ")
for line in a.readlines():
    if copy in line:
        b.write(copy + '\n')
        yes='y'
        for again in raw_input("Would you like to search for another line? y/n: "):
            if again in yes:        
                copy=raw_input("What are you searching for: ")
                if copy in line:
                    b.write(copy + '\n')
    b.close
    a.close

如果我搜索“这不是我想要的”这样的东西,那就需要非操作符进行操作并且不会复制任何内容。

这不可能。 事实上,我只是尝试过,而且没有这样的事情。 一定有别的东西你做错了。

是否可以从所有线中获取其余的字符串?

更换

b.write(copy + '\n')

b.write(line)

你刚刚使用input切换到raw_input吗? 您正在描述的问题(以及您认为需要在路径中加倍反斜杠的事实)将来自使用python 2下的input()从终端读取。 raw_input不应该有这样的问题。

你的第二个问题是明确的:不要做b.write(copy + '\\n') ,做

b.write(line)

line已经包含一个换行符,正如@lars刚刚指出的那样)

也许使用python的re模块在这里会更有帮助。 例如:

#All your existing code to retrieve input and output file names, etc.
#Convert the user's search string into a raw string
copy = eval("r'%s'" % (raw_input("What are you searching for?: "),))

import re

searchRegEx = re.compile(copy)

for line in a:
  matched = searchRegEx.search(line)

 if matched != None:
    b.write(line)

其次,不是让嵌套循环询问用户是否想要搜索另一行(当你已经在搜索一行时),将整个“获取搜索字符串输入并执行搜索逻辑”包装成函数可能更为谨慎。并且在用户仍想继续搜索时重复调用它(即使用布尔值来控制流向它的流量,只要用户在询问时输入'y',就设置为True)。

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM