0

我编写了一个 Pydrive 脚本,它下载特定文件夹中的所有文件。

文档下载为“sampleTitle.md”,mimetype 为“text/plain”。

然后他们只是被提交并推送到我的仓库。

这是我的 pydrive 的 python 代码:

def checkFile(arg):
    if arg['mimeType'] in mimetypes:
        downloadFile(arg)
        print('The file ' + str(arg['title']) + ' has a mimetype of ' + arg['mimeType'] + ' and will be downloaded')
        return
    if arg['mimeType'] in folder:
        enterFolder(arg['id'])
        print('The file ' + str(arg['title']) + ' has a mimetype of ' + arg['mimeType'] + ' and will be entered')
    return

def enterFolder(query):
    file_list = drive.ListFile({'q': '\'' + query + '\' in parents and trashed=false'}).GetList()
    for file1 in file_list:
        checkFile(file1)
    return

def downloadFile(arg):
   download_mimetype = None
   download_mimetype = mimetypes[arg['mimeType']]
   arg.GetContentFile(arg['title'], mimetype=download_mimetype)
   print(arg['title'] + 'got downloaded')
   return

import sys
sys.path.insert(1, '/Library/Python/2.7/site-packages')

from pydrive.auth import GoogleAuth

gauth = GoogleAuth()
gauth.LocalWebserverAuth() # Creates local webserver and auto handles authentication.

from pydrive.drive import GoogleDrive

mimetypes = {
    # Drive Document files as plain text.
    'application/vnd.google-apps.document': 'text/plain'
    # etc.
}

folder = {
    # Comparing for folder.
    'application/vnd.google-apps.folder': 'true'
    # etc.
}

# Create GoogleDrive instance with authenticated GoogleAuth instance.
drive = GoogleDrive(gauth)
# Auto-iterate through all files that matches this query

enterFolder('starfolder')

代码有效并且文件被下载。

在 google docs 中,文件的开头如下所示:

---  
layout: post
title: title
---

它是我需要 jekyll 和 github 页面的 YAML 前端问题。

当我下载文件并将其推送到我的仓库时,它看起来像这样:

·---  
layout: post
title: title
---

我真的不知道那个居中的点是从哪里输入的。它只出现在 github 上,并且隐藏在我所有的编辑器中。(Atom、Textwrangler、Brackets、TextEdit、VisualStudio Code)。似乎当我在编辑器中点应该在的位置按退格键时,它会删除隐藏的点。在 Nano 中,它显示为空格。

我必须以某种方式删除空格,因为它会破坏我的降价格式。有没有有效的解决办法?

编辑

我发现罪魁祸首是在文档开头设置的 BOM。我现在尝试使用 shell 命令将其删除,但我找不到一个可行的方法,我尝试了以下示例:

awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' text.md > text.md
sed '1 s/\xEF\xBB\xBF//' < text.md > text.md

它们会删除文件的完整内容,而不仅仅是 BOM。

任何人都知道我在命令行上做错了什么,因为其他人似乎都能让命令正常工作。

4

1 回答 1

0

当 mimetype 为“application/vnd.google-apps.document”的文件作为“text/plain”下载时,会插入一个 BOM。

这个 BOM 似乎被解释为 nano 和 github 中的空格。

当数据被重命名时,以下用于删除 BOM 的命令有效。

不工作:

awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' text.md > text.md

为我工作:

awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' text > text.md
于 2016-07-07T09:46:29.627 回答